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网关数据同步机制。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值