Soul源码总结-01-25

Soul网关源码分析-网关转发http服务总结

  • 结合之前的学习关于soul网关和admin数据同步的知识,以http服务注册为例,探究soul-admin与soul网关服务节点数据变动的同步机制
  • http服务注册时soul-admin与soul网关数据同步机制

HTTP服务注册时soul-admin与soul网关数据同步

回顾:

根据之前我们知道的http服务注册流程,其实是将准备注册的http服务通过@SoulSpringMvcClient注解标注,在服务启动后由SpringMvcClientBeanPostProcessor向soul-admin的/soul-client/springmvc-registerendpoint 发送POST请求,然后在soul-admin端通过soulClientRegisterService注册springMVC服务.
在这里插入图片描述

进一步探究

soul-admin是如何进一步处理要注册的http服务信息的?我们追踪进入SoulClientRegisterServiceImpl这个实现类,在registerSpringMvc方法中不尽将selector和rule的信息本地持久化,并且将http服务节点的信息存放到后台缓存UpstreamCheckService中。
在这里插入图片描述

在这里插入图片描述
我们继续追踪,进入到UpstreamCheckService中,发现UPSTREAM_MAP中作为缓存存放http服务节点相关信息。
在这里插入图片描述
至此在soul-admin端已经实现http服务节点信息的缓存处理,那么soul-admin又是如何与soul网关同步注册的http服务相关节点信息呢?如果我们仔细看SoulClientRegisterServiceImpl会发现eventPublisher发布数据变更的event
在这里插入图片描述
然后由DataChangedEventDispatcher:来负责分发事件并且调用相应的listener方法来响应相关的event在这里插入图片描述
通过打断点追踪,我们会发现会调用WebsocketDataChangedListener来监听相应的数据变化,并且会调用WebsocketCollector来维护websocket通信。

在这里插入图片描述

Soul网关处理数据更新

我们可以关注soul网关端的SoulWebsocketClient会维持和soul-admin的websocket通信,并且调用websocketDataHandler来根据相关的eventType选择不同的handler(PluginHandler, SelectorHandler, RuleDataHanlder等)来进行相应的处理。在这里插入图片描述
在这里插入图片描述
我们可以理解webSocketDataHandler通过一系列链式调用WebSocketDataHandler-->AbstractDataHandler-->CommonPluginDataHandler-->DivideDataPluginDataHandler最终调用handlerSelector方法在这里插入图片描述
UpstreamCacheManager中我们终于发现UPSTREAM_MAP作为缓存存放着网关的 divide 插件服务节点信息
在这里插入图片描述

总结

soul网关结合了spring的publisher-subscriber模式来进行服务节点信息的更新。稍后我会分析http服务下线后soul-admin与soul网关数据同步机制。

猜你喜欢

转载自blog.csdn.net/qq_42965594/article/details/113163769