背景

maven地址:

  1. <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-remoting -->
  2. <dependency>
  3. <groupId>org.apache.rocketmq</groupId>
  4. <artifactId>rocketmq-remoting</artifactId>
  5. <version>4.5.2</version>
  6. </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架构

  1. 连接管理:NettyConnectManageHandler.putNettyEvent()->NettyEventExecutor.run()
  2. 消息管理:NettyServerHandler.channelRead0()->NettyRemotingAbstract.processRequestCommand->NettyRequestProcessor.processRequest()

问题

  1. NettyConnectManageHandler.putNettyEvent()为什么要通过单线程的NettyEventExecutor将处理NettyEvent的步骤异步化?

其他

  1. 连接管理:NettyConnectManageHandler->NettyEventExecutor.run()->ChannelEventListener
  2. NettyRequestProcessor处理RemotingCommand