请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

springboot容器实例如果是多个,websocket服务也是这样配置吗?

springboot容器实例如果是多个,比如3个,websocket服务也是这样配置吗?对于客户端会不会重复收到消息?

正在回答 回答被采纳积分+3

插入代码

1回答

小简同学 2025-02-24 13:47:09
同学你好,Springboot多实例的websocket配置也是这样子的配置,只是每个Springboot实例的配置文件要指定不同的端口,如果对消息不做处理,由于websocket的消息广播机制是基于独立的Springboot实例,,所以客户端会收到不同Springboot实例发送的相同的信息,如何解决,方案1: 消息添加唯一标识,客户端根据消息唯一标识判断是否已收过此消息,方案2: 使用session保持客户端的会话状态,那么客户端会保持连接到同一个的Springboot实例,
0 回复 有任何疑惑可以回复我~
  • 提问者 慕莱坞6387089 #1
    有这样一个场景:我有两个后端容器实例A、B,前端页面需要实现设备电量的实时更新。这时应该跟其中一个容器A建立websocket连接?不会两个都连接吧?如果是一个连接比如跟A,那B在收到更新消息后就没法实时同步给前端吧?----这种两个实例,前端websocket怎么保证消息都是实时更新的?
    回复 有任何疑惑可以回复我~ 2025-02-24 22:46:54
  • 小简同学 回复 提问者 慕莱坞6387089 #2
    是这样子,这两个实例A,B,它们前面是有个nginx,前端和nginx是基于websocket连接,nginx收到前端消息后,会基于负载均衡算法将消息分配到实例A或者B,但是这样,实例A或B是无法做到消息同步,所以还需要添加一个消息中间件,例如RabbitMQ,实例A和B都是订阅了RabbitMQ,那么完整的逻辑应该是,nginx收到前端消息后,会将消息发送到RabbitMQ,RabbitMQ将消息广播到实例A和B,这样实例A和B就做到了消息同步,然后实例A和B,和Nginx也是基于websocket连接的,那么实例A和B收到广播消息后,可以是给nginx推送消息,再由nginx返回给前端,那么这样问题就是实例A和B可能会发送重复的消息,需要进行去重处理
    回复 有任何疑惑可以回复我~ 2025-02-25 13:18:36
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号