一、消费模式
集群消费:当使用集群消费模式时,消息队列MQ认为任意一条消息只需要被集群内的任意一个消费者处理即可。
广播消费:当使用广播消费模式时,消息队列MQ会将每条消息推送给集群内所有注册过的消费者,保证消息至少被每个消费者消费一次。
二、问题描述
当前项目浏览器与服务器通过WebSocket实现一个通知功能,但该通知消息不稳定、刷新浏览器有时会不显示,问题根源在于部署两台带WebSocket的服务器、两台服务器有相同的GroupID来消费同一个RocketMQ,导致浏览器连接的服务器可能没有消费到MQ消息
三、解决方案
方案1
两台服务器使用不同的Group ID
方案2
两台服务器采用广播消费模式消费MQ消息
方案3
WebSocket从原项目分离出来、只部署一台
方案4
不使用RocketMQ了、整体换方案
四、方案2实践结果
场景1
服务1启动、会消费
服务2启动、会消费
rocketmq-console-ng中对应消息trackType显示的是NOT_ONLINE
场景2
服务1启动、会消费
服务2关闭、再启动、不会消费
场景3
服务1关闭、先启动、会消费
服务2关闭、再启动、不会消费
场景4
服务1关闭、再启动、不会消费
服务2关闭、先启动、会消费
广播模式下,服务端不维护消费进度
广播模式下,消息队列 MQ 保证每条消息至少被每台客户端消费一次,但是并不会重投消费失败的消息
广播模式下,客户端每一次重启都会从最新消息消费。客户端在被停止期间发送至服务端的消息将会被自动跳过
文章仅作为个人学习整理
2254

被折叠的 条评论
为什么被折叠?



