基於websocket如何實現介面訂閱,使用這個sdk就完事了
「這是我參與2022首次更文挑戰的第27天,活動詳情檢視:2022首次更文挑戰」
websocket作為公共服務,儘量抽離業務需要。現websocket作為服務可嵌入使用也可單獨部署使用。視具體專案需求 下面就服務端、客戶端兩端接入說明流程
約定
- dubbo專案框架下需完成以上約定 。 必須按此約定
- controller層資料引數有且僅有一個引數,引數型別=Map
- service層資料引數有且僅有一個引數,引數型別=Map
dubbo介面
- 實際上沒有dubbo介面這一說法。為了能夠準確定位到dubbo真實的方法。這裡簡單規範為dubbo介面 。
- com.ay.aoshan.rpcService.CourseSerive 下的getCourse方法 轉換成dubbo介面即為 com.ay.aoshan.rpcService.CourseService.getCourse
單服務部署
- 為了迎合分散式架構,websocket講抽離出單服務供多專案消費。資料交換靠dubbo進行分發。保障資料準確性
- 需要在websocket的pom中加入以下配置進行打包部署至相應環境。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
服務端
專案配置
-
websocket單獨部署後,客戶端直接連線websocket服務。對第三方專案沒有任何交集。唯一需要注意的是第三方專案需要將客戶端訂閱的介面暴露在nacos服務中。這樣websocket才可以獲取資料。
-
例 : aoshan專案CourseService下的getFavioutCourse方法需要通過websocket對客戶端進行推送資料。
- 首先aoshan專案需要將CourseService暴露在aoshan-interface模組中。
- 然後在aoshan-provider中實現該介面的方法並通過apace.dubbo.service註解將該方法註冊到nacos中。
呼叫mock推送資料
- 推送資料需要將nacos中的WebsocketService服務依賴進來。然後通過WebsocketService.mock方法進行資料推送 。 mock中requesetMapping=dubbo介面
客戶端
- 客戶端訂閱介面和之前結構不同 。 需改為dubbo介面。
- 客戶端接收資料的資料結構也會發生變化。具體變化與具體專案介面協商 。 最外層的key不變 "messageTime";"messageQueueID"; "messageData"; "messageCount";"messageQueue";
嵌入式部署
- 嵌入式部署需要保證websocket中pom檔案沒有以下配置
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
服務端
- 與單獨部署websocket不同的是,嵌入式部署需要第三方專案加入websocket的依賴
<dependency>
<groupId>com.ay</groupId>
<artifactId>framework-websocket</artifactId>
<version>2.0.1</version>
</dependency>
- 然後在springboot啟動類上加入
@WebsocketClient
即可。 - 然後重複上述單獨部署websocket中服務端操作一樣。
客戶端
- 客戶端和單獨部署websocket操作一樣。唯一不同就是地址訪問第三方專案地址
協議支援
- 支援資料解析的擴充套件
- 支援客戶端傳送特定字元
- 支援客戶端傳送resultful介面
- 支援客戶端傳送dubbo介面
不支援
- 點對點通訊
- 群聊