rocketmq消费流程学习笔记

rocketmq源码学习——消费篇

​ 最近在学习rockmq,经过前面的安装的“洗礼”(rocketmq在docker环境下的单机搭建(ubuntu-16.0 + docker-17.03 + rocketmq-4.2)后,准备着用它做一个东西,于是去查网上的“rockmq在实际中的用法”,没有找到称心的,所以去搜了“rockmq源码学习”,看了一篇很棒的文章(文章地址见本篇结尾),跟随着作者看了一遍源码,了解了rockmq的消费流程的源码实现,画了一张方法调用图。

​ 下面开始讲我学到的东西。

开个头

​ 我们一般使用消费者是下面这种方式:创建DefaultMQPushConsumer类,设置好一系列参数后,注册一个MessageListenerConcurrently接口(或者MessageListenerOrderly接口),重写consumeMmessage方法,然后运行DefaultMQPushConsumer.start(),可以看到DefaultMQPushConsumer中有一个DefaultMQPushConsumerImpl对象,其大部分动作都是直接调用的后者的方法,包括start(),所以我们从DefaultMQPushConsumerImpl的start()开始讲。

DefaultMQPushConsumerImpl.start()

注:该类实现了MQConsumerInner接口,这个后面会用到

初始化订阅关系,一个IP的MQ客户端下只有在启动多个进程的情况下才会创建多个MQClientInstance对象,pullAPIWrapper,consumeMessageService,在MQ客户端实例中注册自己,运行MQ客户端实例的start方法。

在本方法中执行的主要代码及注释
//复制订阅关系
this.copySubscription();
/**
                 * 与Producer端一样,创建MQClientInstance对象。
                 * 先检查单例对象MQClientManager的factoryTable:
                 * ConcurrentHashMap<String/* clientId *, MQClientInstance>
                 * 变量中是否存在该ClientID的对象,若存在则直接返回该MQClientInstance
                 * 对象,若不存在,则创建MQClientInstance对象,并以该ClientID为key
                 * 值将新创建的MQClientInstance对象存入并返回,将返回的MQClientInstance
                 * 对象赋值给DefaultMQProducerImpl.mQClientFactory变量;
                 * 说明一个IP客户端下面的应用,只有在启动多个进程的情况下才会
                 * 创建多个MQClientInstance对象
                 */
this.mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(this.defaultMQPushConsumer);
//新建一个PullAPIWrapper因为push的底层实际上是通过pull实现的(即不停的发送pull请求,如果有需要的消息则运行listener的回调方法)
this.pullAPIWrapper = new PullAPIWrapper(this.mQClientFactory, this.defaultMQPushConsumer.getConsumerGroup(), this.isUnitMode());
//判断是哪种监听类型,确定是并发消费还是顺序消费
if (
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值