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 实例消费 全量队列

浙公网安备 33010602011771号