基于websocket如何实现接口订阅,使用这个sdk就完事了

1,968 阅读2分钟

「这是我参与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接口

不支持

  • 点对点通讯
  • 群聊