ZK@3.8源码-07-NettyServerCnxn
经过CnxnChannelHandler处理器的关联,目前Netty和ZK之间的关系如下:
下面就要分析NettyServerCnxn
这个组件如何将数据读取出来封装成Request交给ZK的。
1 从Netty读取数据
Netty有数据可读的时候数据流开始来到NettyServerCnxn中。
java
1 |
|
Netty中的数据放入缓存队列,这样的设计可以有效增加系统吞吐,不管数据从queuedBuffer出口,还是直接从Channel作为直接出口,最终都要调用函数receiveMessage
。
在这个方法中,已经由ZK
实例来处理queuedBuffer
中拿出来的整包数据了。
java
1 |
|
receiveMesage
这个方法设计得有点绕,注释写的比较清楚了,设计的复杂的根本原因还是为了兼容上面processMessage
方法使用queuedBuffer
缓存队列的场景。
java
1 |
|
2 ZK封装请求
上面NettyServerCnxn
组件处理的数据还是字节类型,现在数据的所有权已经到了ZK上,开始对数据进行业务封装,方便整个系统件流转,以及后面请求责任链进行处理。
java
1 |
|
3 请求入队
java
1 |
|
下面数据所有权来到ZK的节流器,由节流器判定是否能够入队。
java
1 |
|
4 数据流转流程图
咖啡红这个线指向的就是数据如何从Netty到ZK的。
ZK@3.8源码-07-NettyServerCnxn
https://bannirui.github.io/2023/03/07/ZK-3-8源码-07-NettyServerCnxn/