背景
maven地址:
<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-remoting --><dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-remoting</artifactId> <version>4.5.2</version></dependency>
client
类名:org.apache.rocketmq.remoting.netty.NettyRemotingClient
参数
| 参数名 |
参数值 |
|
| eventLoopGroupWorker |
线程数1 |
|
| channelClass |
NioSocketChannel |
|
| TCP_NODELAY |
true |
|
| SO_KEEPALIVE |
false |
|
| CONNECT_TIMEOUT_MILLIS |
参数设置 |
|
| SO_SNDBUF |
参数设置 |
|
| SO_RCVBUF |
参数设置 |
handler
| handler名 |
含义 |
|
| NettyEncoder |
将RemotingCommand编码为ByteBuf |
|
| NettyDecoder |
将ByteBuf解码为RemotingCommand |
|
| IdleStateHandler |
空闲handler |
|
| NettyConnectManageHandler |
管理连接,发布NettyEvent |
|
| NettyClientHandler |
处理RemotingCommand |
server
参数
| 参数名 |
参数值 |
|
| eventLoopGroupBoss |
线程数1 |
|
| eventLoopGroupSelector |
参数设置 |
|
| channelClass |
EpollServerSocketChannel或NioSocketChannel |
|
| SO_BACKLOG |
1024 |
|
| SO_REUSEADDR |
true |
|
| SO_KEEPALIVE |
false |
|
| 以下为childOption |
|
|
| TCP_NODELAY |
true |
|
| CONNECT_TIMEOUT_MILLIS |
参数设置 |
|
| SO_SNDBUF |
参数设置 |
|
| SO_RCVBUF |
参数设置 |
handler
| handler名 |
含义 |
|
| handshakeHandler |
|
|
| NettyEncoder |
将RemotingCommand编码为ByteBuf |
|
| NettyDecoder |
将ByteBuf解码为RemotingCommand |
|
| IdleStateHandler |
空闲handler |
|
| NettyConnectManageHandler |
管理连接,发布NettyEvent |
|
| NettyServerHandler |
处理RemotingCommand |
handler架构
- 连接管理:NettyConnectManageHandler.putNettyEvent()->NettyEventExecutor.run()
- 消息管理:NettyServerHandler.channelRead0()->NettyRemotingAbstract.processRequestCommand->NettyRequestProcessor.processRequest()
问题
- NettyConnectManageHandler.putNettyEvent()为什么要通过单线程的NettyEventExecutor将处理NettyEvent的步骤异步化?
其他
- 连接管理:NettyConnectManageHandler->NettyEventExecutor.run()->ChannelEventListener
- NettyRequestProcessor处理RemotingCommand