五、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 消息消费逻辑