RocketMQ的消息消费主要分为两种模式:
- Push Consumer:Broker主动推送消息给Consumer的消费模式。这是RocketMQ的默认消费模式。
- Pull Consumer:Consumer主动向Broker拉取消息的消费模式。
两种消费模式对应的Consumer实现分别是:
- DefaultMQPushConsumer:Broker推模式消费者。
- DefaultMQPullConsumer:Consumer拉模式消费者。
消息消费的主要流程:
- Push Consumer:
- Consumer订阅Topic与Tag,并指定消费起始位置。
- Broker根据订阅信息创建ConsumeQueue和IndexFile,并开始向Consumer推送新产生的消息。
- Consumer接收消息并进行处理,完成后向Broker发送确认信息。Broker接收确认后删除消息。
- Consumer断线重连后从上次确认的位置开始重新推送消息。
- Pull Consumer:
- Consumer订阅Topic与Tag,并指定消费起始位置。
- Consumer主动向Broker发送拉取请求,Broker返回符合过滤条件的消息。
- Consumer接收消息并进行处理,完成后再向Broker发送拉取请求获取下一批消息。
- Consumer断线重连后需重新设置消费起始位置,并向Broker发送首次拉取请求。
两种消费模式对比:
- Push模式:简单易用,有较好的实时性,但Broker压力较大。
- Pull模式:Consumer有更好的流量控制能力,Broker压力较小,但实时性略差,重连需重置起始位置。
RocketMQ通过实现DefaultMQPushConsumer与DefaultMQPullConsumer来支持两种消费模式。Push模式通过长连接主动推送实现较好实时性,Pull模式通过短连接被动拉取实现较好流量控制,完美契合不同场景的消费需求。