第35篇 rabbitmq ChannelN源码分析

最主要上级的与AMQP协议功能的实现,实现所有通道编号(除了编号为0通道)

1、成员和静态变量

名称默认值描述
final String UNSPECIFIED_OUT_OF_BAND“”
final Map<String, Consumer> _consumersCollections.synchronizedMap消费者map
final Collection returnListenersnew CopyOnWriteArrayList()返回监听器
final Collection confirmListenrsnew CopyOnWriteArrayList()确认监听器
long nextPublishSeqNo0L下一条需要确认的已发布消息的序列号
Consumer defaultConsumernull默认消费者
ConsumerDispatcher dispatcher消息者转发器
CountDownLatch finishedShutdownFlagnull资源关闭等待
SortedSet unconfirmSetCollections.synchronizedSortedSet(new TreeSet())未确认的消息
boolean onlyAcksReceivedtrue自上次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

image-20210713135257278

2.2、void waitForConfirmsOrDie

  • image-20210713153139061
    1. 等待确认,如果false的话,需要关闭通道
    2. 进行关闭通道操作
    3. 创建BlockingRpcContinuation对象
    4. 开启关闭通道之前准备工作,通知其他channel可以起来工作了
    5. 调用关闭通道命令
    6. 等待服务器的结果
    7. 释放通道资源,包括编号
    8. 通知通道关闭之后的监听器

2.3、boolean processAsync(command)

  • 异步处理命令
  • image-20210713210217718
  1. 第一步判断是否通道关闭

  2. 对不同命令执行不同处理逻辑

2.4、processDelivery( command, method)

image-20210713212427460

总结

  1. 其实本质上就是调用com.rabbitmq.client.impl.AMQChannel#exnWrappingRpc ,执行命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值