java读取路由列表信息_详解Spring Cloud Gateway 数据库存储路由信息的扩展方案

本文介绍了如何扩展Spring Cloud Gateway的动态路由功能,以满足生产环境中实时变更的需求。通过分析官方默认的内存存储方式,提出了结合MySQL和Redis的存储方案,利用Redis的高并发和分布式特性,实现路由信息的持久化和动态刷新。文章详细讲解了扩展思路,包括新增路由管理模块,重写RouteDefinitionRepository,并展示了关键代码实现。
摘要由CSDN通过智能技术生成

动态路由背景

​ 无论你在使用Zuul还是Spring Cloud Gateway 的时候,官方文档提供的方案总是基于配置文件配置的方式

例如:

# zuul 的配置形式

routes:

pig-auth:

path: /auth/**

serviceId: pig-auth

stripPrefix: true

# gateway 的配置形式

routes:

- id: pigx-auth

uri: lb://pigx-auth

predicates:

- Path=/auth/**

filters:

- ValidateCodeGatewayFilter

配置更改需要重启服务,不能满足实际生产过程中的动态刷新、实时变更的业务需求。

​ 基于以上分析 pig已经提供了基于Zuul版本的动态路由功能,附Git 地址传送门,效果如下图可以实时配置修改刷新。

7deeca8b2227cdbfd024a91d94169105.png

Spring Cloud Gateway 路由加载源码

DispatcherHandler 接管用户请求

RoutePredicateHandlerMapping 路由匹配

根据RouteLocator获取 RouteDefinitionLocator

返回多个RouteDefinitionLocator.getRouteDefinitions()的路由定义信息

FilteringWebHandler执行路由定义中的filter 最后路由到具体的业务服务中

d5c60508ef9338f9382f279e38ab73a9.png

Spring Cloud Gateway 默认动态路由实现

GatewayControllerEndpoint 基于actuate端点的默认实现,支持JVM 级别的动态路由,不能序列化存储

a4f63161f168b91c0c056e2f2227013c.png

// 上图动态路由的信息保存的默认实现是基于内存的实现

public class InMemoryRouteDefinitionRepository implements RouteDefinitionRepository {

private final Map routes = synchronizedMap(new LinkedHashMap())

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值