> 技术文档 > Spring Cloud Gateway 与 Nacos 实战_spring gateway nacos

Spring Cloud Gateway 与 Nacos 实战_spring gateway nacos

目录

0. Linux按照jdk8u131

1. Linux服务器上安装Nacos

1.1 Linux服务器上安装Nacos

1.2 开放端口

2. Spring Cloud Gateway

2.1 引入依赖包

2.2 添加配置文件

3. Nacos上添加配置

4 idea上添加环境变量

5. 验证从nacos读取配置和注册服务

6. 验证gateway的功能

6.1 验证负载均衡模式转发

 6.2 验证IP:端口转发模式

​7. 经验总结


Spring Cloud 框架是基于JDK1.8搭建的,以下是各个组件版本:

alibaba-spring-cloud:2.2.10-RC1

spring-cloud:Hoxton.SR12

spring-boot:2.3.12.RELEASE

nacos:2.2.0

如果想自定义版本请参考官网版本:版本发布说明-阿里云Spring Cloud Alibaba官网

0. Linux按照jdk8u131

0.1 下载安装包

       该链接包含jdk1.8大部分安装包:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

0.2 上传包并解压

tar -xvf jdk-8u131-linux-x64.tar.gz

0.3 配置环境变量

vi /etc/profile

export JAVA_HOME=/root/java/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile

0.4 查看版本号

java -version

备注:单独把安装jdk写出来是因为jdk8u131版本花了一个小时,才在oracle官网上找到。

1. Linux服务器上安装Nacos

 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现配置管理服务管理平台

具体介绍参考:Nacos 配置中心简介, Nacos 是什么 | Nacos 官网

1.1 Linux服务器上安装Nacos

下载安装包nacos-server-2.2.0.tar.gz,下载地址:https://github.com/alibaba/nacos/releases

解压:

tar -xvf nacos-server-2.2.0.tar.gz

 单机启动nacos:

./startup.sh -m standalone

浏览器访问:http://47.108.255.3:8848/nacos/

1.2 开放端口

若使用阿里云服务器搭建nacos,必须放开这个三个端口的防火墙:8848,9849,9848;否则本地想从nacos上读取配置和注册服务时会怀疑人生。

2. Spring Cloud Gateway

Spring Cloud Gateway主要功能是转发请求,断言和过滤,本次会实现他们的基础功能。

2.1 引入依赖包
   org.springframework.cloud spring-cloud-starter-gateway    org.springframework.cloud spring-cloud-starter-loadbalancer    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery    com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config 
2.2 添加配置文件

2.2.1 在resources目录下创建bootstrap.yml文件,spring cloud项目启动时会优先加载这个文件,该文件仅配置服务名称和Nacos基本信息,其他配置都时从Nacos服务器上拉取,配置如下:

spring: #基本配置,其余配置都在nacos服务器上,参考nacosconfig目录下的配置 application: name: gateway-server cloud: nacos: #所有配置从nacos中获取 config: # 配置中心地址 server-addr: 47.108.255.3:8848 namespace: springcloud group: SPRING_CLOUD username: nacos password: nacos # 配置文件格式 file-extension: yml # 共享配置 shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} extension-configs: #添加此配置是为了修改配置后不用重启服务器 - data-id: ${spring.application.name}-real-time-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} group: SPRING_CLOUD refresh: true #实时刷新配置

2.2.2 启动类增加注解

@EnableDiscoveryClient:接入nacos

@RefreshScope:动态加载nacos配置,无需重启服务

@SpringBootApplication@EnableDiscoveryClient // 接入nacos@RefreshScope // 动态加载nacos配置,无需重启服务public class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); System.out.println(\"(♥◠‿◠)ノ゙ 系统模块启动成功 ლ(´ڡ`ლ)゙\"); }}

3. Nacos上添加配置

第一步:创建一个命名空间,我创建的是springcloud

第二步:创建两个配置文件

getaway-server-dev.yml:存放不会变动的基础配置;

gateway-server-real-time-dev.yml:存放可能变动的配置;

配置分别如下:

server: port: 8091 #服务端口spring: application: name: gateway-server cloud: nacos: discovery: # 服务注册地址 server-addr: 47.108.255.3:8848 namespace: springcloud username: nacos password: nacos config: # 配置中心地址 server-addr: 47.108.255.3:8848 namespace: springcloud group: SPRING_CLOUD username: nacos password: nacos # 配置文件格式 file-extension: yml # 共享配置 shared-configs: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} extension-configs: - data-id: ${spring.application.name}-real-time-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} group: SPRING_CLOUD refresh: true #实时刷新配置
spring: cloud: gateway: discovery: locator: enabled: true # 启用服务发现路由功能 routes: - id: testgateway1 uri: http://localhost:9400 predicates: - Path=/gateway/** filters: - StripPrefix=1 # 移除路径中的第一个前缀(如 /gateway/gateway → /gateway)先匹配再移除 - id: testgateway2 uri: http://localhost:9400 predicates: - Path=/redis/** filters: - StripPrefix=1 # 移除路径中的第一个前缀(如 /gateway/gateway → /gateway)先匹配再移除 - id: users-server1 uri: lb://users-server #通过服务名转发 predicates: - Path=/api/users/** filters: - StripPrefix=1 # 移除路径中的第一个前缀(如 /gateway/gateway → /gateway)先匹配再移除

4 idea上添加环境变量

idea上指定环境-Dspring.profiles.active=dev;

在linux上部署命令:java -jar gateway-start-1.0.0-SNAPSHOT.jar --spring.profiles.active=dev

5. 验证从nacos读取配置和注册服务

启动日志中可以看到gateway已经注册到nacos上,同样可以看得端口号为8091,这是nacos上配置的,说明已经读取到配置

 登录nacos查看服务列表,也已经显示出来

6. 验证gateway的功能

本地启动users项目,如图所示,users也注册到nacos上

6.1 验证负载均衡模式转发

配置:lb://users-server,说明走的是负载均衡,8091是gateway的端口,而/api/users/say/hello1是users的接口,从结果上看是转发成功了。

 6.2 验证IP:端口转发模式

第一步:修改配置文件gateway-server-real-time-dev.yml,转换调用模式

第二步:发起请求,同上,请求成功

7. 经验总结

7.1 Spring Cloud的版本要一致

7.2 yml文件编写一定要仔细,有可能一个空格就会导致整个项目无法启动

7.3 服务器端口防火墙一定要开发,如着重标注的nacos三个端口,若不开放防火墙,永远都服务本地加载配置和注册服务

7.4 到各个官网去注册一个账号,说不定什么时候就用上了