RocketMQ高性能通信实现机制源码精读

126 阅读1分钟

精度RocketMQ通信机制源码

异步通信机制

源码精读

生产者发送消息

图1

图1

异步监听消息发送结果

图2

图2

创建一个线程池
用其中的一个线程去执行发送消息的动作

图3

图3

监听发送结果
如果有回调函数则调用回调函数

这里的onSuccess回调就是图1中的回调函数

图4

图4

1、一个请求对应一个请求编号
每次请求的发送都要先获取一个信号量锁
在服务器资源有限的情况下 防止调用太快导致服务不可用

2、一个请求编号对应一个响应结果
将对应关系保存在内存中

3、进行netty通信

图5

图5

NettyRemotingServer.NettyServerHandler
读取到发送过来的请求并处理

图6

图6

执行处理请求的逻辑

图7

图7

将该请求封装成一个任务
提交到业务线程池来处理
处理完之后 封装响应对象(包含请求编号)
发送给netty客户端

图8

图8

NettyRemotingClient 接收到netty server发送过来的响应数据

图9

图9

解析响应数据

图10

图10

通过请求编号从内存中获取未来响应对象
有回调函数则执行回调函数
没有回调函数则将响应对象封装到未来对象中

图11

图11

从线程池获取线程异步执行回调函数
然后就来到了图3的回调
图3回调到图1执行具体的onSuccess逻辑

上述流程的时序图