Soul网关源码阅读(九)—— 数据同步之WebSocket
文章目录
概要
之前我们简单介绍了soul网关是通过admin进行数据同步的,这一篇我们来消息介绍一下soul网关使用websocket来进行数据同步的关机设计和详细流程。
流程图
详细解析
1. WebsocketSyncDataConfiguration
首先知道网关与admin之间需要同步的数据类型有哪些:
- 插件Plugin
- 元数据MetaData
- 认证数据AuthData
我们那需要为每一种数据类型编写不同的业务逻辑:
- PluginDataSubcriber
- MetaDataSubcriber
- AuthDataSubscriber
这里我们Websocket下对应实现类分别是:
- CommonPluginDataSubscriber
- MetaDataAllSubscriber
- SignAuthDataSubscriber
WebsocketSyncDataConfiguration配置类,组合了以上对象,并且初始化了WebsocketSyncDataService对象。WebsocketSyncDataService对象是用来进行数据同步的类型,它组合了一个WebSocketClient用来与admin服务进行socket通信。
2. WebsocketSyncDataService
WebsocketSyncDataService在初始化的时候,会出发WebSocketClient初始化并且通过websocket连接到admin,连接到配置的端口:ws://localhost:9095/websocket
。
Admin服务WebSocketCollector
的onMessage
方法会触发soul的请求:
@OnMessage
public void onMessage(final String message, final Session session) {
if (message.equals(DataEventTypeEnum.MYSELF.name())) {
try {
ThreadLocalUtil.put(SESSION_KEY, session);
SpringBeanUtils.getInstance().getBean(SyncDataService.class).syncAll(DataEventTypeEnum.MYSELF);
} finally {
ThreadLocalUtil.clear();
}
}
}
Admin中通过SyncDataServiceImpl来syncAll
方法来进行所有数据类型的同步,由于是soul刚启动,所以需要同步全量数据