## spring cloud gateway 自动刷新路由
spring cloud gateway 自动刷新路由问题什么时候刷新?刷新流程刷新路由流程:初始化 DiscoveryClient调用 initScheduledTasks() 方法,初始化两个线程 CacheRefreshThread 和 HeartbeatThread , 默认每 30 秒调用CacheRefreshThread会发布 HeartbeatEventHeartbeatThrea
·
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
- 如果是 RefreshRoutesEvent 事件, 调用
Routes 更新过程
- CachingRouteLocator.fetch() 总入口 ,使用装饰器模式,代理
CompositeRouteLocator,而CompositeRouteLocator中 代理最终使用RouteDefinitionRouteLocator的getRoutes()方法 - 在 RouteDefinitionRouteLocator 中, 调用 RouteDefinitionLocator 的
getRouteDefinitions()实现 route 刷新 - RouteDefinitionLocator 也使用了装饰器 和组合模式:
- InMemoryRouteDefinitionRepository, 基于内存, 默认方式
- PropertiesRouteDefinitionLocator, 基于 properties 文件,如果使用了 properties 文件
- RedisRouteDefinitionRepository 【新增】
CacheRefreshThread
在 DiscoveryClient 中


交给子类 CloudEurekaClient 实现, 发布 HeartBeatEvent:

更多推荐


所有评论(0)