通过Nacos动态刷新SpringCloudGateway的路由
通过Nacos动态刷新Spring Cloud Gateway的路由
⼀、背景
最近在学习Spring Cloud Gateway,⽽我们的路由配置默认情况下是写在配置⽂件中的,这样当我们有⼀个新的服务接⼊时,需要修改配置⽂件,然后重启⽹关应⽤程序,那么我们是否可以在不停⽌⽹关的情况下,动态的刷新路由信息呢?
⼆、解决⽅案
我们知道,nacos是可以实现配置的动态刷新和服务发现的。那么我们将Spring Cloud Gateway的配置放到nacos上是否就可以实现动态的刷新路由呢?
通过测试发现是可以实现的。此处我们通过Spring Cloud Alibaba技术来实现。
1、服务的注册和发现使⽤Spring Cloud Alibaba Nacos来实现。
2、⽹关使⽤Spring Cloud Gateway来实现。
结论:其实只需要在Spring Cloud Gateway中整合Spring Cloud Alibaba Nacos Config,⽹关的路由配置就可以⾃动刷新了,不需要额外的编码。
三、实现功能
1、提供⼀个商品服务,对外提供⼀个findAllProduct的接⼝返回商品信息。
2、实现⼀个⽹关服务,外部服务的访问,都先通过⽹关程序,然后调⽤到具体的服务。
3、⽹关服务的路由配置信息需要可以动态的配置。
四、实现步骤
1、⽹关服务的实现
1、pom⽂件
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
springcloud和springboot
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
2、l配置⽂件
spring:
application:
name: gateway-9201
cloud:
nacos:
discovery:
# 配置 nacos 的服务地址
server-addr: localhost:8847
config:
# nacos 配置服务的地址,后⾯的端⼝不能省,即使是80端⼝
server-addr: localhost:8847
# 加载 dataid 配置⽂件的后缀,默认是 properties
file-extension: yml
# 配置组,默认就是 DEFAULT_GROUP
group: DEFAULT_GROUP
# 配置命名空间,此处写的是命名空间的id 的值,默认是 public 命名空间
# namespace:
# data-id 的前缀,默认就是 spring.application.name 的值
prefix: ${spring.application.name}
server:
port: 9201
注意:因为配置是放置在nacos上,所以和Spring Cloud Alibaba Nacos Config相关的配置需要放置到l配置⽂件中。
此处主要配置 nacos 的配置信息,不需要配置⽹关的路由信息。
3、启动类
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class);
}
}
启动类上不需要额外别的注解。
4、nacos上⽹关的配置
spring:
cloud:
gateway:
routes:
- id: user-9202
uri: lb://product-9202
predicates:
- Path=/user/**
filters:
- RewritePath=/user(?<segment>/?.*), $\{segment}
- id: product-9203
uri: lb://product-9203
predicates:
- Path=/product123/**
filters:
- RewritePath=/product123(?<segment>/?.*), $\{segment}
5、⽹关配置完成
⾄此⽹关程序就配置完成了,那么这样配置之后路由就可以动态的刷新了吗?是的。Spring Cloud Gateway和Spring Cloud Alibaba nacos config整合后就⾃动实现了配置的⾃动刷新功能。
2、商品服务的实现
商品服务就是简单的提供了⼀个rest api,然后注册到nacos上,⽐较简单,略。
五、实现效果
六、完成代码
七、参考⽂档

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。