天天看點

SOUL網關的資料同步模式-websocket

1、介紹

         soul網關選用websocket的方式進行同步,websocket的通訊是雙向全雙工的,在soul網關當中,當souladmin的配置資料進行更新時,會将資料推送至網關伺服器中,并由網關伺服器進行緩存。

2、同步步驟

  伺服器連接配接開啟:

souladmin啟動項目,由于引入了javax.websocket包,使用@ServerEndpoint注解建立了一個服務端點。

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

客戶機開啟,即soul-bootstrap項目

在該項目中,初始化了bean:WebsocketSyncDataService

SOUL網關的資料同步模式-websocket

于此之後,用戶端開啟一個定時的排程線程池,10秒鐘執行次,如果連接配接關閉,則重新連接配接,否則發送ping指令檢視是否連接配接正常。

SOUL網關的資料同步模式-websocket

用戶端與服務端成功建立連接配接後,用戶端發送一個MYSELF的消息,服務端收到後,會進行資料同步

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

同步所有資料,使用ThreadLocal記錄該連接配接對象,在後續同步時,直接将資料發送至該連接配接。

type比對,目前連接配接通過線程取ThreadLocal中的session值,進行發送

SOUL網關的資料同步模式-websocket

用戶端接收到消息,并進行緩存,這整個過程,會将souladmin所有配置pull下來,存儲到客戶機的記憶體當中

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

以上過程便是客戶機啟動後,從Souladmin拉取配置的過程

建立好連接配接,先在souladmin界面中,修改一下選擇器的配置。請求會進入到SelectorController中

SOUL網關的資料同步模式-websocket

進入到了實作類當中

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

其中關鍵方法為publishEvent(),釋出了一個消息,那麼,可以在消息監聽器中檢視,訂閱後進行了什麼操作。

 DataChangedEventDispatcher訂閱資料更新操作

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

該類實作了InitializingBean接口,注入了applicationContext,并将改變的資料按照類别,分發到對應的監聽器執行器當中。執行器配置在DataSyncConfiguration當中,此配置即采用的資料同步配置,在yml中配置。此處我們選擇的是websocket,那麼,請求進入WebsocketDataChangedListener 當中。

在WebsocketDataChangedListener當中,可以看到,它将資料封裝成了websoke資料格式,包含資料改變類型、資料類型等

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

進入發送方法, 明顯這裡的type是前面傳過來的,不是MYSELF,會将消息發送給所有的websocket用戶端,由用戶端進行緩存。

SOUL網關的資料同步模式-websocket
SOUL網關的資料同步模式-websocket

以上便是服務端推送配置到客戶機的過程