websocket同步數據
初始化屬性部分
首先啓動soul-admin項目,然後啓動soul-boostrap項目,可以明顯發現websocket連接成功
奇怪的是,使用昨天測試SpringCloud的數據庫發現webosocket無法連接成功。後續可以繼續嘗試下這種問題發生的原因
分析pom文件的依賴可知。由於soul-boostrap是springboot項目,所以websocket相關的配置是從soul-spring-boot-starter-sync-data-websocket加載
這個例子中涉及到starter相關的知識不做解讀了。在這個configration中通過注入bean注入了websocket的配置以及幾個空的訂閱器包括插件訂閱器pluginSubscriber,元數據訂閱器metaSubscribers和認證訂閱器authSubscribers用來監聽admin項目的數據的改變。
此處的websocketConfig屬性由配置文件注入。其他屬性特別是pluginSubscriber數據的ObjectProvider是Spring4.3之後的一個新特性。簡單來說就是可以代替@Autowired的作用。具體的示例,可以參考https://www.cnblogs.com/fightingting/p/14300409.html 和 https://www.cnblogs.com/fengxueyi/p/13888562.html
數據準備和連接部分
從代碼可以看到。對於websocket這一塊。做好了多個websocket的連接的做法。隨後阻塞的連接每個客戶端。然後利用線程池每隔30秒檢測是否關閉。關閉的話回去嘗試重連接。如果不能重新連接會拋出錯誤
發送消息部分
關於websocket發送消息的部分,我之前使用spring-websocket做過一個類似的案例https://zhaozhen.blog.csdn.net/article/details/80356392 。其實主要就是利用onMessage來傳遞數據。即在修改時由admin發送數據。隨後網關部分做相應操作
接下來有了這樣的問題。接收到了數據之後WebsocketDataHandler的executor並沒有實現什麼實際的操作,這個需要後續在組件操作時繼續研究
問題
- 在保存有其他同步機制的情況下,websocket的通信問題
- 數據變化時WebsocketDataHandler的executor會做什麼樣的操作
歡迎搜索關注本人與朋友共同開發的微信面經小程序【大廠面試助手】和公衆號【微瞰技術】,以及總結的分類面試題https://github.com/zhendiao/JavaInterview