开发者社区 > 云原生 > 云消息队列 > 正文

RocketMQ我这边是3个RocketMQ的集群,主从,感觉是无法切换到其他消费者上消费?

RocketMQ我这边是3个RocketMQ的集群,主从,用了controller和proxy。生产者、消费者客户端也有3个。这样是能正常生产消费的。
问题是:现在是消息一直在其中一台消费者上消费的,我把那一台消费者关闭了,后续生产了消息就无法消费消息了。感觉是无法切换到其他消费者上消费?

展开
收起
真的很搞笑 2023-12-17 08:27:59 104 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据你的描述,RocketMQ集群中的一台消费者关闭后,新的消息无法被消费。这可能是因为消费者的消费进度没有及时提交,导致消息一直停留在队列中等待消费。在RocketMQ中,消费者的消费进度默认是每隔30秒提交一次,如果在这30秒内消费者没有正常处理完消息,那么这些消息将会被重新放回队列中等待下一次消费。

    你可以尝试以下几种解决方案:

    1. 检查消费者是否正常运行,如果有异常,需要尽快修复。
    2. 检查消费者组的配置是否正确,确保所有的消费者都在同一个消费者组中。
    3. 检查消费者的订阅关系是否正确,确保每个消费者都订阅了所有需要消费的主题。
    4. 如果以上都没有问题,你可以尝试手动提交消费者的消费进度,让消息尽快被消费。
    2023-12-17 14:57:03
    赞同 展开评论 打赏
  • 如果您的RocketMQ集群配置了主从部署,使用了Controller和Proxy,并且拥有3个生产者和消费者客户端,理论上应该能够正常进行消息的生产和消费。

    当您关闭其中一台消费者时,由于RocketMQ采用推模式(Push Model)来将消息主动推送给消费者,消息会自动分配给可用的消费者。如果您关闭了其中一台消费者,RocketMQ会尝试将消息重新分配给其他可用的消费者去消费。

    但是,有几个可能导致消息无法在其他消费者上消费的情况:

    1. 消费者组名称和订阅关系:请确保所有消费者客户端都属于同一个消费者组,并且订阅了相同的Topic和Tag。否则,消息无法在不同消费者间共享和切换。

    2. 配置正确的Namesrv地址:通过在消费者客户端中指定正确的NameServer地址,确保消费者可以正确连接到RocketMQ集群,并获得最新的Topic和订阅关系信息。

    3. 消费模式配置:在创建消费者时,要确认消费模式是否设置为集群模式(默认)。如果使用广播模式,消息将被所有消费者消费,而不仅限于一个消费者。

    4. 消息过滤规则:检查消息过滤规则是否与消费者的订阅关系匹配。如果消息无法满足消费者的过滤规则,那么消息将不会推送给该消费者。

    2023-12-17 14:21:33
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载