rocketmq-spring icon indicating copy to clipboard operation
rocketmq-spring copied to clipboard

使用RocketMQMessageListener订阅多个topic的问题

Open MrZbb opened this issue 2 years ago • 12 comments

当在一个应用实例使用RocketMQMessageListener订阅多个topic,使用一个消费组的时候例如以下这样 1.@RocketMQMessageListener(topic = "test1",consumerGroup = "consumerGroup") 2.@RocketMQMessageListener(topic = "test2",consumerGroup = "consumerGroup") 会存在严重的消息丢失情况,去服务器查看topic跟的队列信息会出现以下情况,部分队列没有被client绑定造成消息丢失。 image 但是看了下官方文档的订阅关系原则如下,一个消费者组跟不同的topic的关系是独立的,这边的设计是否产生了矛盾 image

MrZbb avatar Apr 25 '23 02:04 MrZbb

老哥解决了吗?

zangxiyang avatar Aug 11 '23 22:08 zangxiyang

您可以通过实现RocketMQPushConsumerLifecycleListener并在prepareStart中为不同consumerGroup的RocketMQMessageListener设置唯一的instanceName来解决此问题。

YshGitHubfcasd avatar Aug 23 '23 08:08 YshGitHubfcasd

老哥解决了吗?

最后一个应用实例针对不同topic用的不同consumer-group...只能这样了

MrZbb avatar Aug 30 '23 12:08 MrZbb

image

你理解的有问题,代码中明显订阅关系不一致。官方文档:https://rocketmq.apache.org/zh/docs/4.x/bestPractice/07subscribe

mufengCc avatar Sep 04 '23 09:09 mufengCc

image

你理解的有问题,代码中明显订阅关系不一致。官方文档:https://rocketmq.apache.org/zh/docs/4.x/bestPractice/07subscribe

确实是订阅关系不一致的问题,那同一个consumer group下多个consumer同时订阅多个topic,老哥有解决思路吗

15521935616 avatar Sep 04 '23 16:09 15521935616

image

image

参考上图

mufengCc avatar Sep 05 '23 01:09 mufengCc

image

image

参考上图

我这边理解从应用维度了(比如图中的c1是一个应用节点,而不是一个应用里的一个consumer对象),一个应用当一个消费者了。那如果以应用内的一个consumer对象看,那确实我这边理解错了,但是这样子写,会不会存在一个topic需要广播模式消费,一个topic是普通消费就不行了,这种配置方式就不行了

MrZbb avatar Sep 06 '23 15:09 MrZbb