「这是我参与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接口
不支持
- 点对点通讯
- 群聊