Springboot+websocket基于Redis订阅发布实现集群化
前面讲了单机版的websocket如何使用发送群聊(2020-03-24-springboot快速集成websocket实现群聊),那么要是部署多个服务实现集群话怎么实现呢?
由于websocket是长连接,session保持在一个server中,所以在不同server在使用websocket推送消息时就需要获取对应的session进行推送,在分布式系统中就无法获取到所有session,这里就需要使用一个中间件将消息推送到各个系统中,在这里使用的redis,使用redis的sub/pub功能。
实现步骤
- Redis要配置消息监听容器
1 | package cn.pconline.pcloud.admin.config; |
- Redis消息处理类
收到消息后,给当前Server的session发送消息
1 | package cn.pconline.pcloud.admin.mq; |
- websoketEndpoint修改
原先直接发消息的地方,改为发送Rdis订阅消息。
1 | package cn.pconline.pcloud.admin.ws; |
至此,websocket基于Redis订阅发布实现集群化改造完成。