当前位置: 首页 > 网络应用技术

RocketMQ源代码分析8:消费者启动过程

时间:2023-03-07 00:05:03 网络应用技术

  基于RocketMQ-4.9.0的RocketMQ-4.9.0分析

  消费者代码示例:

  首先,它暴露于开发人员的外观。真正的工作是它的内部,所以我们看到的逻辑

  内容非常多,我将在代码中添加一些注释

  }

  在分析生产者启动时,由于产品是客户端,因此它将基于此实例创建一个对象。LET查看此类的结构:

  }

  在这里,我们注意。实际上,当分析经纪人,制作人时,我们经常看到这一点,因为RocketMQ将Netty用作通信。

  :Netty客户对象

  :Netty的服务器对象

  将消费者组的信息添加到本地客户端实例的地图中,key = groupName;值=,是消费者对象

  里面有很多东西,主要如下:

  它是为了启动内部并使用它与经纪人进行通信。

  那么有什么样的时机任务?继续看,列出一些特别注意

  2.8.2.1向经纪人发送心跳

  延迟1S执行,每30年代每30年代发送一次心跳袋

  2.8.2.2永久消费者抵消

  延迟10s执行,每5s偏移耐用

  此处的持久性是将本地地图中的主席发送到经纪人,然后将经纪人中的正时任务写入文件中以完成真实的持久性,以后将看到。

  他是一个异步线,其核心逻辑是

  他将听封锁队列。当队列为空时,他将始终阻止它。如果不是空的,请获取对象拉消息。这种逻辑将在稍后说。

  它必须在开始时被阻止。我们需要查看何时将值放入队列中,以及将值放入之后该怎么做

  它也是一个异步线,其核心逻辑为

  他是沉重平衡的核心逻辑,但在开始时,由于使用了JUC锁,因此不会立即平衡它,而是阻碍了它。何时将余额引发?我们继续观看

  这有点怀疑吗?难道是否已经在以前的计时任务中开始了心跳服务?您为什么还必须从这里开始?我不知道,猜想是因为我担心网络问题不会及时发送给经纪人,对吗?

  在2.8.4时,启动了沉重的平衡服务,但由于倒计时被阻塞。这是唤醒 - 可以执行沉重平衡的逻辑。

  请勿在此处注意其内部逻辑,然后分析以后进行分析。

  实际上,消费者客户端的启动过程就在这里。至于如何提取消息,这也是这些服务类别的合作。稍后,我们正在仔细分析[消费者消费过程]()。获取消息和消费是如何逐步拉动它的。

  与生产者启动过程相比,消费者启动的启动过程更加复杂,并且将启动许多对象(实际上,生产者也已经开始,因为它们都是基于客户端实例创建的对象,但生产者不会使用某些人使用其中一些。服务课)

  只需总结:

  好吧,这里分析了消费者启动过程,接下来对消费过程进行了分析。

  仅限于作者的个人层面,文章中有不可避免的事情,欢迎纠正!不要喷洒,谢谢

  原始:https://juejin.cn/post/7099362210165555231