SpringCloud-Gateway动态路由之Nacos

  1. DiscoveryClientRouteDefinitionLocator:从注册中心中读取路由信息(如Nacos、Eurka、Zookeeper等)

我们可以通过自定义RouteDefinitionRepository的实现类来实现动态路由的目的。

实现动态路

有的数据加载我们可以查看源码RouteDefinitionRepository的存储的实现类,只有InMemoryRouteDefinitionRepository,此实现类是存放在内存中的。

我们可以重新定义一个nacos作为存储的实现,看下面的代码

上面代码核心的是重写 getRouteDefinitions 方法实现路由信息的读取;这个方法中涉及到了ConfigService对象Api的方法

管理Api方法,这个老顾这里不详细说了;小伙伴们可以理解为就是操作nacos config的对象

配置Nacos监听器,监听路由配置信息的变化,也是利用api方法,也就是addListener方法;此方法一看就知道,就是用来监听config信息变化的。

此addListener方法中路由变化只需要往 ApplicationEventPublisher 推送一个 RefreshRoutesEvent 事件,即刻gateway会自动监听该事件并调用 getRouteDefinitions 方法更新路由信息。

这样就达到了动态更新路由了。

配置类

为了更好的把此动态路由作为公共core,我们需要利用配置类,达到是否启用的方式;可以让开发者自行配置。

上面的配置类,有两个重要的**@ConditionalOnProperty,这个就是用来控制是否启用动态路由,以及是否用nacos作为存储。**

里面还有@Value注解定义我们存储路由信息的DataId和Group,application.yml如果不配置默认值为scg-routes和SCG_GATEWAY

添加Nacos路由配置

在同一个namespace中创建scg-routes和SCG_GATEWAY

格式选择json,json体里面的格式其实就是RouteDefinition类的属性

注意上面的配置的json是数组格式哦,也就是可以有很多路由哦

[{
“id”: “baidu”,
“order”: 0,
“predicates”: [{
“args”: {
“pattern”: “/baidu/"
}, “name”: “Path”
}], “uri”: “https://www.baidu.com”
},{ “id”: “sina”,
“order”: 2,
“predicates”: [{
“args”: {
“pattern”: "/sina/

}, “name”: “Path”
}], “uri”: “http://www.sina.com.cn”
}]

测试

在网关项目中的application.yml中配置

rainbow:
gateway:
dynamicRoute:
enabled: true

启动网关,就可以了;为了方便看到网关当前的路由信息,我们需要引入

org.springframework.boot spring-boot-starter-actuator

并且在application.yml中配置

management:
endpoints:
web:

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

[外链图片转存中…(img-48SpeZWx-1719174632586)]

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值