零、前戏
上一篇文档,分析了soul-admin与soul-bootstrap之间的基本通信流程。 本篇文章将从收发两端分析,基础数据是soul-admin如何发送,soul-bootstrap是如何接受处理的。
一、soul-admin发送过程分析
从初始化到发布数据的流程大致如下:
- DataSyncConfiguration类中初始化WebsocketCollector、WebsocketDataChangedListener
- WebsocketCollector用于websocket服务端的监听与发送数据
- 在WebsocketCollector的syncAll方法,用于对活的seesion同步全量数据,一般发生在建立连接时的第一次同步。
- SyncDataServiceImpl 内使用基于spring事件发布监听的机制,对具体处理数据变更发送的代码进行解耦,此类发送数据变更事件
科普帖:https://blog.csdn.net/wanping321/article/details/86667216
- DataChangedEventDispatcher监听SyncDataServiceImpl的发送数据变更事件,此类基于InitializingBean接口的初始化 。科普帖http://c.biancheng.net/view/5239.html
- WebsocketDataChangedListener用于监听DataChangedEventDispatcher发起ApplicationEvent事件,调用WebsocketCollector的send方法,将原数据发送给soul-bootstrap集群。
二、soul-bootstrap接受过程分析
从初始化到接收数据的流程大致如下:
- WebsocketSyncDataConfiguration使用ObjectProvider的方式注入实现泛型的所有实例的类,大大简化了注入过程及提高更好扩展性, 最终包装是生成WebsocketSyncDataService
科普帖:https://www.cnblogs.com/fengxueyi/p/13888562.html
- WebsocketSyncDataService中用于建立与soul-admin集群的心跳机制,具体可参考上一篇文章
- WebsocketSyncDataService创建SoulWebsocketClient中用于处理与websocket服务端的数据交互响应
SoulWebsocketClient中通过调用websocketDataHandler的executor方法,根据不同type区分不同handle,完成不同功能模块的数据更新。
- 此处以PluginDataHandler为例,实际通过PluginDataSubscriber的实现类CommonPluginDataSubscriber中subscribeDataHandler,完成了将接收数据更新到BaseCahe的操作。
三、小结
- 学习spring事件发布订阅、InitializingBean加载、
- 明确了webscoket的数据同步流程,对分布式环境系统下,注册中心与节点集群通讯同步有个更深的理解
- 日拱一卒