前 言
「三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦。」
【重要】视频在 B 站同步更新,欢迎围观,轻轻松松涨姿势。一张图进阶 RocketMQ-通信机制(视频版) 点击查看【bilibili】
本文是“一张图进阶 RocketMQ”第 4 篇,对 RocketMQ 不了解的同学可以先看看前面三期:
[一张图进阶 RocketMQ-整体架构](https://www.bilibili.com/video/BV1534y157RF)
[一张图进阶 RocketMQ - NameServer](https://www.bilibili.com/video/BV1tY4y1g795)
[一张图进阶 RocketMQ - 消息发送](https://www.bilibili.com/video/BV1bf4y1Z7ui)
上一期分享了 RocketMQ 生产者启动流程及同步消息发送流程,我们知道了在通信层是基于 Netty 将消息传递给 Broker 进行存储的。如果对 Netty 完全不了解我们就很难真正理解 RocketMQ,所以今天我们简单的聊一聊 Netty 基本流程,然后分析 RocketMQ 的通信机制,最后通过异步消息发送来串联 RocketMQ 通信机制。
Netty 介绍
Netty 有很多概念,等介绍完概念大家都困了,我们就不过多介绍了,直接结合示例来看看 Netty 的基础流程,能够帮助我们更好的理解 RocketMQ 即可。
-
Netty 服务端启动初始化两个线程组 「BossGroup & WorkerGroup」,分别用于处理「客户端连接及网络读写」。
-
Netty 客户端启动初始化一个线程组, 用于处理请求及返回结果。
-
客户端 「connect」 到 Netty 服务端,创建用于 「传输数据的 Channel」。
-
Netty 服务端的 BossGroup 处理客户端的连接请求,然后把剩下的工作交给 WorkerGroup。
-
连接建立好了,客户端就可以利用这个连接发送数据给 Netty 服务端。
-
Netty WorkerGroup 中的线程使用 「Pipeline(包含多个处理器 Handler)」 对数据进行处理。
-
Netty 服务端的处理完请求后,返回结果也经过 Pipeline 处理。
-
Netty 服务端通过 Channel 将数据返回给客户端。
-
客户端通过 Channel 接收到数据,也经过 Pipeline 进行处理。
Netty 示例
我们先用 Netty 实现一个简单的 服务端/客户端 通信示例,我们是这样使用的,那 RocketMQ 基于 Netty 的通信也应该是这样使用的,不过是在这个基础上封装了一层。主要关注以下几个点:服务端什么时候初始化的,服务端实现的 Handler 做了什么事?客户端什么时候初始化的,客户端实现的 Handler 做了什么事? 「Ne