我的一个spring-boot应用需要消费两个topic,其中一个需要广播,另一个topic则负载均衡即可,如图所示。 image 我有三个消费者组,每一个消费者组都对应一个单独的topic,分别如下 DemoMqListener:
我有三个消费者组,每一个消费者组都对应一个单独的topic,分别如下 DemoMqListener:
Topic4SingleMeddleConsumerTopic4SingleMeddleConsumer:
Topic4SingleRunConsumer
但是当消息发送成功后,该springboot应用并不能主动消费消息,而在rocketMQ的控制台中,则可以看到
点开消息详情后,我可以通过点击“resend Message”来手动消费,这样的话我的springboot应用就可以消费到该消息,但还有一点奇怪的是,名称为“consumer-group”的消费者组是我的测试消费,它只订阅了test-topic,但它却可以消费到topic-task:all-single这条topic的信息,如果同样混乱,但TASK_MEDDLE_CONSUMER_GROUP_NAME的消费者组却不能消费到topic-task的信息,这让我很迷惑,而且我的所有应用都没有接收到消息,但控制台已经提示应该resend了,但我手动点击resend的时候,我的应用才真正接收到了消息
原提问者GitHub用户YAGAMIL
我找到问题了,当我把Topic4SingleRunConsumer类中的注解改为字符串而非常量的时候,启动后就可以主动消费到信息了,如下所示:
@slf4j @RocketMQMessageListener( topic = "topic-task", // topic:和消费者发送的topic相同 consumerGroup = "task_run_consumer" // group:不用和生产者group相同 ) @component public class Topic4SingleRunConsumer implements RocketMQListener { 而原本是这样
@slf4j @RocketMQMessageListener( topic = RocketConstant.TASK_SINGLE_RUN_TOPIC, // topic:和消费者发送的topic相同 consumerGroup = TASK_RUN_CONSUMER_GROUP_NAME // group:不用和生产者group相同 ) @component public class Topic4SingleRunConsumer implements RocketMQListener { 区别在于topic和consumerGroup的赋值方式 这样的话可以消费到,但问题是,这两个内容完全一样,出了一个使用了常量名一个直接用字符串值,没有任何区别,其次,如果他们两个不等同,那么我用常量名赋值的时候,虽然不能主动消费到信息,但我在控制台中resend Message却可以手动消费到,重发消息后收到消息的也确实是Topic4SingleRunConsumer类,这也太奇怪了吧
原回答者GitHub用户YAGAMIL
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。