基於websocket如何實現介面訂閱,使用這個sdk就完事了

語言: CN / TW / HK

「這是我參與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介面

不支援

  • 點對點通訊
  • 群聊