前言
今天继续RocketMQ-Rpc通信模块(remoting)的源码分析。上一章提到了主要的start()方法执行流程,如果有不清楚的地方可以一起讨论哈,这篇文章会继续解读主要方法,按照惯例先看看NettyRemotingAbstract的类图,看类图知方法。和NettyEventExecutor以及MQ的交互流程。 按照惯例先看看NettyRemotingAbstract的类图,看类图知方法,文中会挑重要方法和主要流程解读。
再看看其核心属性:
//oneway方式发送的限流控制
protected final Semaphore semaphoreOneway;
//异步发送的限流控制
protected final Semaphore semaphoreAsync;
//缓存是已经发送,但是还未收到回应的map
protected final ConcurrentMapresponseTable =new ConcurrentHashMap(256);
//事件code对应的处理器
protected final HashMap<integer *="" request="" code="" ,="" pair> processorTable =
new HashMap<integer, pair>(64);
//Netty事件处理如心跳,连接,关闭等
protected final NettyEventExecutor nettyEventExecutor = new NettyEventExecutor();
//默认处理器,上篇已经介绍使用方式
protected PairdefaultRequestProcessor; //消息处理器
//ssl相关
protected volatile SslContext sslContext;
复制代码
具体的交互流程:在RocketMQ消息队列中支持通信的方式主要同步接口(invokeSync),异步接口(invokeAsync) 直接发送(invokeOneway),以异步发送为例流程图如下所示: