目標(biāo)
- WebSocketClient客戶端數(shù)據(jù)流處理邏輯圖
- WebSocketDataHandler核心類(lèi)的組成
- 總結(jié)
WebSocketClient客戶端數(shù)據(jù)流處理邏輯圖
整個(gè)數(shù)據(jù)處理流程都是圍繞 WebSocketDataHandler 類(lèi)實(shí)現(xiàn)的眉撵,主要包含不同種數(shù)據(jù)類(lèi)型對(duì)應(yīng)的處理Handler,和一個(gè)執(zhí)行消息的executor
// 數(shù)據(jù)對(duì)應(yīng)的處理函數(shù)Map
private static final EnumMap<ConfigGroupEnum, DataHandler> ENUM_MAP = new EnumMap<>(ConfigGroupEnum.class);
// 消息處理方法
public void executor(final ConfigGroupEnum type, final String json, final String eventType) {
ENUM_MAP.get(type).handle(json, eventType);
}
重點(diǎn)看下構(gòu)造函數(shù),在WebSocket客戶端連接服務(wù)端時(shí)候使用了Spring4.3新特性O(shè)bjectProvider來(lái)依賴注入Bean。將Subscriber與Handler綁定到一起了撩轰。
public WebsocketDataHandler(final PluginDataSubscriber pluginDataSubscriber,
final List<MetaDataSubscriber> metaDataSubscribers,
final List<AuthDataSubscriber> authDataSubscribers) {
ENUM_MAP.put(ConfigGroupEnum.PLUGIN, new PluginDataHandler(pluginDataSubscriber));
ENUM_MAP.put(ConfigGroupEnum.SELECTOR, new SelectorDataHandler(pluginDataSubscriber));
ENUM_MAP.put(ConfigGroupEnum.RULE, new RuleDataHandler(pluginDataSubscriber));
ENUM_MAP.put(ConfigGroupEnum.APP_AUTH, new AuthDataHandler(authDataSubscribers));
ENUM_MAP.put(ConfigGroupEnum.META_DATA, new MetaDataHandler(metaDataSubscribers));
}
從代碼可以看出,Subscribers 作為Handler的構(gòu)造函數(shù)。根據(jù)不同屬性的數(shù)據(jù)格式與應(yīng)用場(chǎng)景不同贝或。有定義Subscribe對(duì)象域數(shù)組區(qū)別诈火。
口述數(shù)據(jù)處理流程(selector為例)
- 數(shù)據(jù)到達(dá)onMessage
- 拿到真實(shí)數(shù)據(jù)并且解析出數(shù)據(jù)類(lèi)型以及事件類(lèi)型
- 拼接成json字符串
- 調(diào)用websocketDataHandler的executor,根據(jù)數(shù)據(jù)類(lèi)型執(zhí)行對(duì)應(yīng)的handler
- 根據(jù)事件類(lèi)型判斷是刷新還是更新還是刪除
這里就執(zhí)行對(duì)應(yīng)數(shù)據(jù)類(lèi)型定義的handler方法了,這里面主要有doRefresh,doUpdate,doDelete三種類(lèi)型的方法
- 刷新本地緩存
- 因?yàn)镾elector對(duì)應(yīng)的協(xié)議插件不關(guān)心,那么這個(gè)數(shù)據(jù)發(fā)生變化只是處理下本地緩存即可
- MetaData元數(shù)據(jù)發(fā)生變化,不單單要更新本地緩存,同時(shí)還要告知關(guān)心這個(gè)數(shù)據(jù)的插件進(jìn)行相關(guān)的處理滔金。
WebSocketDataHandler核心類(lèi)的組成
不同數(shù)據(jù)的Handler類(lèi)之間關(guān)系圖
發(fā)布者定義
主要是不同的操作對(duì)象關(guān)心不同的數(shù)據(jù),為了統(tǒng)一前置數(shù)據(jù)更新操作,采用了發(fā)布者模式屎蜓。來(lái)進(jìn)行消息流的傳遞痘昌。
WebSocketDataHandler
將Handler與Subscriber關(guān)聯(lián)在一起,代碼見(jiàn)上方
總結(jié)
soul-admin
soul 網(wǎng)關(guān)
將上一章數(shù)據(jù)流圖與本章數(shù)據(jù)流圖整合到一起,soul 數(shù)據(jù)同步中心的核心流程以及類(lèi)圖關(guān)系就很清楚了。下一章節(jié)針?lè)治鰖ookeeper 如何做數(shù)據(jù)同步的炬转。