RocketMQ 的消息消费机制是怎样的?有哪些消费模式?

RocketMQ的消息消费主要分为两种模式:

  1. Push Consumer:Broker主动推送消息给Consumer的消费模式。这是RocketMQ的默认消费模式。
  2. Pull Consumer:Consumer主动向Broker拉取消息的消费模式。

两种消费模式对应的Consumer实现分别是:

  • DefaultMQPushConsumer:Broker推模式消费者。
  • DefaultMQPullConsumer:Consumer拉模式消费者。

消息消费的主要流程:

  1. Push Consumer:
  • Consumer订阅Topic与Tag,并指定消费起始位置。
  • Broker根据订阅信息创建ConsumeQueue和IndexFile,并开始向Consumer推送新产生的消息。
  • Consumer接收消息并进行处理,完成后向Broker发送确认信息。Broker接收确认后删除消息。
  • Consumer断线重连后从上次确认的位置开始重新推送消息。
  1. Pull Consumer:
  • Consumer订阅Topic与Tag,并指定消费起始位置。
  • Consumer主动向Broker发送拉取请求,Broker返回符合过滤条件的消息。
  • Consumer接收消息并进行处理,完成后再向Broker发送拉取请求获取下一批消息。
  • Consumer断线重连后需重新设置消费起始位置,并向Broker发送首次拉取请求。

两种消费模式对比:

  • Push模式:简单易用,有较好的实时性,但Broker压力较大。
  • Pull模式:Consumer有更好的流量控制能力,Broker压力较小,但实时性略差,重连需重置起始位置。

RocketMQ通过实现DefaultMQPushConsumer与DefaultMQPullConsumer来支持两种消费模式。Push模式通过长连接主动推送实现较好实时性,Pull模式通过短连接被动拉取实现较好流量控制,完美契合不同场景的消费需求。