## spring cloud gateway 自动刷新路由

spring cloud gateway 自动刷新路由

问题

  • 什么时候刷新?

刷新流程

刷新路由流程:

  • 初始化 DiscoveryClient
    • 调用 initScheduledTasks() 方法,初始化两个线程 CacheRefreshThread 和 HeartbeatThread , 默认每 30 秒调用
    • CacheRefreshThread 会发布 HeartbeatEvent
    • HeartbeatThread 更新 lastSuccessfulHeartbeatTimestamp 时间戳
  • CacheRefreshThread
    • 调用 refreshRegistry() 方法
      • 调用 fetchRegistry() 方法
        • 调用 onCacheRefreshed() 方法, 在子类 CloudEurekaClient 重载后 发布 HeartbeatEvent 事件
  • RouteRefreshListener : 监听HeartbeatEvent ,并且发布 RefreshRoutesEvent 事件
  • RefreshRoutesEvent 促发本地拉取最新的路由信息
  • CachingRouteLocator : 自动装配默认的 路由更新器, CachingRouteLocator 监听 RefreshRoutesEvent 事件
    • 如果是 RefreshRoutesEvent 事件, 调用 fetch() 方法更新 routes

Routes 更新过程

  • CachingRouteLocator.fetch() 总入口 ,使用装饰器模式,代理 CompositeRouteLocator,而 CompositeRouteLocator 中 代理最终使用 RouteDefinitionRouteLocatorgetRoutes() 方法
  • 在 RouteDefinitionRouteLocator 中, 调用 RouteDefinitionLocator 的 getRouteDefinitions() 实现 route 刷新
  • RouteDefinitionLocator 也使用了装饰器 和组合模式:
    • InMemoryRouteDefinitionRepository, 基于内存, 默认方式
    • PropertiesRouteDefinitionLocator, 基于 properties 文件,如果使用了 properties 文件
    • RedisRouteDefinitionRepository 【新增】

CacheRefreshThread

DiscoveryClient
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
交给子类 CloudEurekaClient 实现, 发布 HeartBeatEvent:

在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值