问题现象:
开发人员反馈测试环境的应用服务有消费不到 rocketmq 消息的情况。
从 RocketMq-Console-Ng 查看 topic 消费情况,sitVasGroup 这个消费组确实没有消费到 sitServicePayTopic 的消息。
排查过程:
看到同一个消费者 Group ID(sitVasGroup)下有两个 Consumer 实例 (10.3.200.98@wxPayNotifyConsumer 和 10.3.200.98@companyConsumer )。
和开发人员确认,两个 Consumer 实例订阅的 topic 不一致,10.3.200.98@companyConsumer 订阅的 topic 是 testUsercenterTopic,而 10.3.200.98@wxPayNotifyConsumer 订阅的 topic 是 sitServicePayTopic。
原因分析:
由于消息队列 RocketMQ 的订阅关系主要由 Topic + Tag 共同组成,因此,保持订阅关系一致意味着同一个消费者 Group ID 下所有的实例需在以下两方面均保持一致:
- 订阅的 Topic 必须一致
- 订阅的 Topic 中的 Tag 必须一致
一旦订阅关系不一致,消息消费的逻辑就会混乱,甚至导致消息丢失。
解决办法:
使用新的消费组 testVasPayGroup 订阅 topic sitServicePayTopic 的消息,问题解决。
参考:
网友评论