RocketMQ的Consumer是如何消费消息的

Rocketmq提供了两种主要的消费模式:推送式消费(Push Consumer)和 拉取式消费(Pull Consumer)


一、Consumer消费消息的基本流程

1、实例化Consumer:创建并配置一个Consumer实例

2、订阅主题:指定要订阅的主题和标签

3、注册消息监听器:开始消费消息

4、启动Consumer:开始消费消息

5、处理消息:在监听器中处理接收到的消息


代码示例


详细解释


1、Consumer实例化:

  • 使用DefaultMQPushConsumer类拆功能键Consumer实例化,并指定Consumer Group

  • Consumer Group用于标识一组具有相同角色的Consumer实例


2、设置NameServer地址:

  • 使用 setNamesrvAddr方法设置Rocketmq的NameServer地址


3、订阅主题:

  • Subscribe方法用于订阅指定的主题

  • 第一个参数是主题名,第二个参数是标签过滤表达式。"*"表示订阅该主题下的所有消息


4、注册消息监听器:

  • registerMessageListener方法用于注册一个消息监听器

  • 这里使用的是 MessageListenerConcurrently接口,消息并行处理,不保证顺序,但吞吐量高

  • 使用是MessageListenerOrderly接口,单队列单线程处理,保证消息顺序(但性能较低)

  • 在consumeMessage方法中实现具体的消息处理逻辑


5、消息处理:

  • 在监听器的consumeMessage方法中,我们遍历收到的消息列表并打印消息内容

  • 返回 ConsumeConcurrentlyStatus.CONSUME_SUCCESS,表示消息已成功消费

  • 返回 ConsumeConcurrentlyStatus.RECONSUME_LATER,表示消息已失败消息,稍后重试


6、启动 Consumer:

  • 调用start方法启动Consumer实例开始消费消息


其它重要概念

1、消费模式:

  • Push 模式(DefaultMQPushConsumer):Broker 主动推送消息给 Consumer(底层仍是 Consumer 长轮询)

  • Pull模式:Consumer主动从Broker拉取消息


2、消费过滤:

  • 可以通过标签(Tag)或 自定义属性进行消息过滤


3、消费进度:

  • Rocketmq会自动管理消费进度,确保消息不会重复消费


4、消息失败处理:

  • 如果消息处理失败,可以返回 ConsumeConcurrentlyStatus.RECONSUME_LATER,Rocketmq会稍后重试

  • 默认最多重试 16次,之后转入死信队列(%DLQ%+ConsumerGroup)


5、消息消费模式(负载均衡):

  • 集群模式:

    • 同一 Consumer Group 下的多个实例 均分队列(如 4 个队列 + 2 个 Consumer,每个 Consumer 处理 2 个队列)

    • 通过 RebalanceService 定时(默认 20s)重新分配队列

  • 广播模式:

    • 每个 Consumer 实例消费 全量队列
posted @ 2025-04-10 21:08  jock_javaEE  阅读(202)  评论(0)    收藏  举报