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 到各个官网去注册一个账号,说不定什么时候就用上了