最主要上级的与AMQP协议功能的实现,实现所有通道编号(除了编号为0通道)
1、成员和静态变量
名称 | 默认值 | 描述 |
---|---|---|
final String UNSPECIFIED_OUT_OF_BAND | “” | |
final Map<String, Consumer> _consumers | Collections.synchronizedMap | 消费者map |
final Collection returnListeners | new CopyOnWriteArrayList() | 返回监听器 |
final Collection confirmListenrs | new CopyOnWriteArrayList() | 确认监听器 |
long nextPublishSeqNo | 0L | 下一条需要确认的已发布消息的序列号 |
Consumer defaultConsumer | null | 默认消费者 |
ConsumerDispatcher dispatcher | 消息者转发器 | |
CountDownLatch finishedShutdownFlag | null | 资源关闭等待 |
SortedSet unconfirmSet | Collections.synchronizedSortedSet(new TreeSet()) | 未确认的消息 |
boolean onlyAcksReceived | true | 自上次waitForConfirms()以来是否已收到任何nacks |
MetricsCollector metricsCollector | 指标收集 |
2、方法
方法名称 | 描述 | 图示 |
---|---|---|
ChannelN() | 构造方法, 创建ConsumerDispatcher对象 | |
void open() | 打开通道,发送Channel.OpenOk指令 | |
void addReturnListener | 添加返回监听器 | |
ReturnListener addReturnListener | 多一个回调方法 | |
boolean removeReturnListeners() | 移除返回监听器 | |
void clearReturnListener | 清除所有监听器 | |
void addConfirmListener() | 添加确认监听器 | |
void addConfirmListener(ackCallback, nackCallBack) | 回调监听器 | |
boolean removeConfirmListener(listener) | 移除确认监听器 | |
void clearConfirmListeners | 清除确认监听器 | |
boolean waitForConfirms(timeout) | 等待确认 | 1 |
void waitForConfirmsOrDie(timeout) | 等待确认或关闭请求 | 2 |
void processShutdownSignal | 处理关闭通道信号 | |
boolean processAsync(command) | 异步处理命令 | 3 |
void processDelivery() | 处理Delivery命令 | 4 |
void callReturnListeners | 处理返回监听器 | |
void callConfirmListeners | 处理确认命令 | |
void basicPublish | 发布消息 | |
Exchange.DeclareOk exchangeDeclare | 交换器的声明 | |
void exchangeDeclareNoWait | 无等待交换器声明 | |
2.1、boolean waitForConfirm
2.2、void waitForConfirmsOrDie
-
- 等待确认,如果false的话,需要关闭通道
- 进行关闭通道操作
- 创建BlockingRpcContinuation对象
- 开启关闭通道之前准备工作,通知其他channel可以起来工作了
- 调用关闭通道命令
- 等待服务器的结果
- 释放通道资源,包括编号
- 通知通道关闭之后的监听器
2.3、boolean processAsync(command)
- 异步处理命令
-
第一步判断是否通道关闭
-
对不同命令执行不同处理逻辑
2.4、processDelivery( command, method)
总结
- 其实本质上就是调用com.rabbitmq.client.impl.AMQChannel#exnWrappingRpc ,执行命令