前言
上一篇博客,记录的是push模式,异步发送netty请求拉取消息的代码,这篇博客主要记录consumer发送同步netty请求,去拉取消息的逻辑,但是对于同步发送请求,需要结合LitePullConsumer来看
在Lite PullConsumer中有两种方式,分别是:subscribe和assign模式,这两种模式的区别,我的理解是:前者是mq帮我们进行负载均衡,后者我们可以按照自己的需求去进行负载均衡,给当前消费者分配messageQueue
但是这两种模式的相同点是:都是采用的pull模式,需要在消费者这一端,主动的去pull消息
对于使用同步发送请求的consumer,需要这样使用
所以可以看到,对于pull模式,就是在业务代码中自己去poll的,接着我们来看源码
源码
start()
org.apache.rocketmq.client.impl.consumer.DefaultLitePullConsumerImpl#start
如图1所示:在这个start()方法中,有两个方法需要着重关注下,就是mqClientFactory.start()和operateAfterRunning()
前面这个方法已经看了好多次了,后面这个方法是assign模式的时候,会取启动task任务,这个后面再说
图1:
我们先来看mqClientFactory.start(),和这篇博客有关系的,是这里面负载均衡的逻辑
这个调用链中间的逻辑,比较简答,就不介绍了,我们主要关注和pull模式拉取消息有关的逻辑
this.rebalanceService.start();