websocket集群在websocket基础上修改,添加redis消息队列
原理:由于集群有多个websocket应用,两个用户有可能不在同一个应用中,发送消息时用户会接收不到消息。所以将用户发送的消息先发布到redis消息队列中,所有应用都连接到同一个redis并订阅消息主题,所有应用都会收到这条消息,最后所有应用都发送这条消息,无论用户连接到哪个websocket应用,都会收到这条消息。
- 依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
</dependencies>
- 配置文件
spring:
redis:
host: 192.168.211.100
port: 6379
database: 1
password:
timeout: 5000ms
- 连接校验
/**
* 连接时校验用户信息,并返回重写的Principal
*/
@Component
public class MyHandshakeHandler extends DefaultHandshakeHandler {
@Override
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
if