Soul网关源码分析-websocket数据同步(续)

463 阅读2分钟

简述

上一篇中,通过soul官网的原理图从宏观上了解了数据同步的原理,然后也从过往请求转发的分析过程所用到的缓存数据集合作为切入点,分析了soul的websocket数据同步涉及的几个核心的类,那这一篇中,打算从类图和时序图两个角度来看看websocket数据同步涉及的内容以及整个数据同步的过程。

类图

首先我们看一下类图,这里我将涉及的类分为两部分,一部分是监听相关的类,一部分是消息订阅涉及的类,下图显示的是监听相关类: 类图1 其中,比较核心的类是DataChangedEventDispatcher:负责监听所有数据变动请求,并根据变动的数据类型触发WebsocketDataChangedListener中不同的监听方法;WebsocketDataChangedListener:负责根据变动的数据类型构造相应的websocketData数据对象,并通过WebsocketCollector发送变动数据到soul网关进行更新;

下面再来看看消息订阅相关的类,如下图所示: 其中关键的类是SoulWebsocketClient、WebsocketDataHandler、CommonPluginDataSubscriber、BaseDataCache,SoulWebsocketClient是用于和soul-admin进行websocket通讯连接的,而WebsocketDataHandler是用于处理各种数据变更请求,而CommonPluginDataSubscriber是用于发布消息订阅,BaseDataCache是用于存储各种类型缓存数据的。

时序图

上面从类之间关系的角度描述了websocket数据同步涉及的内容,接下来我们以时序图的角度来看看各个涉及的类是如何协同工作的,如下图所示: 时序图 图中我分为三块,第一块是soul-admin,第二块是soul-bootstarp,第三块是soul-web,图中描述了这三块相互间是如何合作的,整个过程是soul-admin先启动,然后打开了websocket通道,接着soul-bootstrap启动,和soul-admin建立起了websocket连接,接着soul-admin的WebsocketCollector会通过onMessage方法将数据全量同步一次到soul网关,soul-admin在启动后,也会有一个监听程序在监听数据的变化,一旦soul-admin中配置数据发生了变化,就会触发相应的监听事件,由WebsocketCollector发送相应类型的配置数据到soul网关,通知soul网关更新数据,而soul网关在启动后,也会通过CommonPluginDataSubscriber订阅各种类型的配置数据,一旦收到soul-admin的数据变更通知,则由WebsocketDataHandler立刻更新BaseDataCache缓存中的数据。

总结

今天从不一样的角度去分析源码,以往都是从点到线一步步跟踪源码的处理流程,这次方式稍微改变一下,先从类图的角度梳理相关的类,再以这些类为主线,通过时序图的方式将各个类之间相互间的协助进一步描述出来。