Websocket集群解决方案( 三 )

获取服务器IP和端口可以具体查看Github源码,这里就不做详细描述了 。
修改服务端点 ServerEndpoint在WebSocket添加消息的接收方法 , @RabbitListener 接收消息,队列名称使用常量命名,动态队列名称使用 #{name},其中的nameQueuebean 名称:
@RabbitListener(queues= "#{psQueue.name}")public void pubsubQueueFirst(String message) {System.out.println(message);sendMessage(message);}然后再调用sendMessage方法发送给所在连接的客户端 。
修改消息发送在WebSocket类的onMessage方法将消息发送改成RabbitMQ方式发送:
@OnMessagepublic void onMessage(String message){if (!message.equals("ping")){log.info("【wesocket】收到客户端发送的消息,message={}",message);//sendMessage(message);if (rabbitTemplate == null) {rabbitTemplate = (RabbitTemplate) SpringContextUtil.getBean("rabbitTemplate");}rabbitTemplate.convertAndSend("PUBLISH_SUBSCRIBE_EXCHANGE", null, message);}}消息通知流程如下所示:
Websocket集群解决方案

文章插图
启动两个实例,模拟集群环境打开idea的Edit Configurations
Websocket集群解决方案

文章插图
点击左上角的COPY,然后添加端口server.port=8081
Websocket集群解决方案

文章插图
启动两个服务 , 端口分别是80808081 。在启动8081端口的服务,将前端连接端口改成8081:
var ws = new WebSocket("ws://127.0.0.1:8081/message");效果展示
Websocket集群解决方案

文章插图
源码github源码
参考
  • Spring Websocket in a tomcat cluster
  • WebSocket 集群方案

推荐阅读