开发者社区 > 云原生 > 正文

消费者不主动消费信息,之只能通过控制台手动点击消费才可以

我的一个spring-boot应用需要消费两个topic,其中一个需要广播,另一个topic则负载均衡即可,如图所示。 image 我有三个消费者组,每一个消费者组都对应一个单独的topic,分别如下 DemoMqListener:

提问69.png

我有三个消费者组,每一个消费者组都对应一个单独的topic,分别如下 DemoMqListener:

提问70.png

Topic4SingleMeddleConsumerTopic4SingleMeddleConsumer:

提问71.png

Topic4SingleRunConsumer

提问72.png

但是当消息发送成功后,该springboot应用并不能主动消费消息,而在rocketMQ的控制台中,则可以看到

提问73.png

点开消息详情后,我可以通过点击“resend Message”来手动消费,这样的话我的springboot应用就可以消费到该消息,但还有一点奇怪的是,名称为“consumer-group”的消费者组是我的测试消费,它只订阅了test-topic,但它却可以消费到topic-task:all-single这条topic的信息,如果同样混乱,但TASK_MEDDLE_CONSUMER_GROUP_NAME的消费者组却不能消费到topic-task的信息,这让我很迷惑,而且我的所有应用都没有接收到消息,但控制台已经提示应该resend了,但我手动点击resend的时候,我的应用才真正接收到了消息

原提问者GitHub用户YAGAMIL

展开
收起
芬奇福贵 2023-05-26 11:18:26 122 0
1 条回答
写回答
取消 提交回答
  • 我找到问题了,当我把Topic4SingleRunConsumer类中的注解改为字符串而非常量的时候,启动后就可以主动消费到信息了,如下所示:

    回答21.png

    @slf4j @RocketMQMessageListener( topic = "topic-task", // topic:和消费者发送的topic相同 consumerGroup = "task_run_consumer" // group:不用和生产者group相同 ) @component public class Topic4SingleRunConsumer implements RocketMQListener { 而原本是这样

    回答22.png

    @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

    2023-05-26 17:30:34
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
DTS控制台一本通 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载