DefaultMQPushConsumer拉取消息的启动:
1.DefaultMQPushConsumer.start() 调用 DefaultMQPushConsumerImpl.start()
2.DefaultMQPushConsumerImpl.start() 调用 MQClientInstance.start()
3.MQClientInstance.start() 调用 RebalanceService.start()
4.RebalanceService作为线程启动后,在run方法中使用rocketmq.client.rebalance.waitInterval属性所定义的间隔,调用MQClientInstance.doRebalance()
5.MQClientInstance.doRebalance() 调用 DefaultMQPushConsumerImpl.doRebalance()
6.DefaultMQPushConsumerImpl.doRebalance() 调用 RebalancePushImpl.doRebalance()
7. RebalancePushImpl.doRebalance() 是在父类RebalanceImpl中定义的。在方法中调用rebalanceByTopic,嵌套调用updateProcessQueueTableInRebalance,嵌套调用dispatchPullRequest。
8.RebalanceImpl.dispatchPullRequest() 方法由RebalancePushImpl覆写,在方法中将调用DefaultMQPushConsumerImpl的executePullRequestImmediately(requests)方法。由此启动push consumer 对消息的拉取。
DefaultMQPushConsumer拉取消息的循环:
在PullCallback中,如果成功获取消息,根据DefaultMQPushConsumer中的pullInterval变量重新发起pull request。