1 假设关系图如下:
图1
2 启动流程如下:
3 一切美好的事情都从PullMessageService的run方法开始了:
3.1 run方法会不断的从LinkedBlockingQueue中获取PullRequest对象,然后根据PullRequest进行消息拉取。
问题1:是谁把PullRequest放到LinkedBlockingQueue中呢?
答:参见一个consumerGroup只对应一个topic中,consumer的rebalance流程,rebalance完毕会将PullRequest放到LinkedBlockingQueue中,对于图1中的关系,会产生8个PullRequest,分别对应 broker_a的q0~q3和broker_b的q0~q3
问题2:PullRequest是什么?
问题3:具体如何进行消息拉取?
答:代码参见DefaultMQPushConsumerImpl.pullMessage(PullRequest pullRequest)
大概如下: