跳到主要内容

五、RocketMQ源码分析消息消费机制—-消费者拉取消息机制


1、 消息消费需要解决的问题;

首先再次重复啰嗦一下RocketMQ消息消费的一些基本元素的关系

主题—》 消息队列(MessageQueue) 1 对多

主题—-》 消息生产者,,,一般主题会由多个生产者组成,生产者组

主题—- 》 消息消费者,,一般一个主题也会被多个消费者消费

那消息消费至少需要解决如下问题:

1、 一个消费组中多个消费者是如何对消息队列(1个主题多个消息队列)进;

行负载消费的。

2、 一个消费者中多个线程又是如何协作(并发)的消费分配给该消费者的;

消息队列中的消息呢?

3、 消息消费进度如何保存,包括MQ是如何知道消息是否正常被消费了;

4、 RocketMQ推拉模式实现机制;

再提一个业界关于消费者与消息队列的消费规则

1个消费者可以消费多个消息队列,但一个消息队列同一时间只能被一个消费者消费,这又是如何实现的呢?

后续几篇文章都会围绕上述问题进行展开,读者朋友们,带上上述的问题,我们一起遨游在RocketMQ消息消费的世界中吧。

2、 消费端拉取消息机制;

2、 1消息消费端核心类介绍;

 

DefaultMQPushConsumerImpl :消息消息者默认实现类,应用程序中直接用该类的实例完成消息的消费,并回调业务方法。

RebalanceImpl 字面上的意思(重新平衡)也就是消费端消费者与消息队列的重新分布,与消息应该分配给哪个消费者消费息息相关。

MQClientInstance 消息客户端实例,负载与MQ服务器(Broker,Nameserver)交互的网络实现

PullAPIWrapper pull与Push在RocketMQ中,其实就只有Pull模式,所以Push其实就是用pull封装一下

MessageListenerInner 消费消费回调类,当消息分配给消费者消费时,执行的业务代码入口

OffsetStore 消息消费进度保存

ConsumeMessageService 消息消费逻辑