Alibaba Spring Cloud 二十八 RocketMQ Consumer

在 RocketMQ 中,Consumer(消费者) 用于接收并处理来自 Broker 的消息。通过 Consumer,可以将业务逻辑从发送端解耦出来,实现异步或分布式处理,常见场景包括数据同步、事件驱动、分布式工作流等。以下内容将帮助你快速了解和掌握 RocketMQ Consumer 的基本概念、工作机制以及常见的使用示例与注意事项。


1. 基础概念

  1. Topic

    • Consumer 通过订阅 (subscribe) 某个 Topic(及其 Tag)来消费消息。
    • 一个 Topic 可以被多个 Consumer Group 消费;而同一个 Consumer Group 下的多个消费者一般分摊消息(集群模式)。
  2. Consumer Group

    • Consumer Group 是一组逻辑上的消费者,通常代表同一个业务功能或同一个微服务集群实例。
    • 集群消费模式下,同一个 Group 下的多个 Consumer 实例会进行负载均衡,共同消费某个 Topic 的消息;
    • 广播消费模式下,同一个 Group 内的所有 Consumer 都会收到 Topic 的全部消息(常用于日志广播、配置分发等)。
  3. NameServer 路由

    • Consumer 启动后,首先向 NameServer 拉取 Topic 的路由信息,获取可用的 Broker 以及对应的队列分布。
  4. 消息拉取 / 推送

    • RocketMQ 采用**拉模式(Pull)**为主,官方 DefaultMQPushConsumer 对外表现为“推送”方式,但底层仍然是 Consumer 主动向 Broker 拉取消息。
    • 对用户来说,消息会以回调的方式(MessageListener)“推送”到业务逻辑中。
  5. 消息消费位置(偏移量)

    • Consumer 在消费消息时,RocketMQ 会维护消费进度(offset),标记当前 Consumer Group 对每个 Queue 消费到哪一条消息。
    • 如果 Consumer 停机或重启,会从上次的 offset 位置继续消费,保证消息不丢失或重复过多。

2. 消费模式

  1. 集群消费 (Clustering)

    • 默认且最常用的模式。
    • 同一个 Consumer Group 下的消费者实例会分摊消息,每条消息只会被其中一个消费者实例处理。
    • 适用于大部分业务场景,需要高吞吐并行处理。
  2. 广播消费 (Broadcasting)

    • 同一个 Consumer Group 内,每个实例都能收到全部消息,互不影响。
    • 适合广播通知、日志分发等场景,不适合消息量特别大或要求严格消费一次的场景。

在 Java 客户端中,可通过 consumer.setMessageModel(MessageModel.BROADCASTING)MessageModel.CLUSTERING(默认)来切换。


3. Consumer 工作流程

  1. 启动并注册到 NameServer

    • Consumer 启动时,需要设置 namesrvAddr 或从外部环境获知 NameServer 地址。
    • 向 NameServer 拉取 Topic 路由信息,获取 Broker 列表。
  2. 订阅 Topic

    • 调用 consumer.subscribe(topic, subExpression) 指定要消费的 Topic 和 Tag(如 TagA || TagB* 表示全部 Tag)。
    • Consumer 将向 Broker 或 NameServer 注册自己的订阅信息。
  3. 拉取消息 / 分配 Queue

    • Broker 或本地负载均衡器会给同一个 Consumer Group 下的不同实例分配不同的消息队列(Queue);
    • Consumer 会从对应的队列中拉取消息,并回调交给业务逻辑处理。
  4. 处理回调

    • 在 Java 中,可以采用 MessageListenerConcu
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值