第15篇 rabbitmq Method抽象类源码分析

本文深入探讨了AMQP协议中的Method接口和抽象类,详细介绍了Method的接口方法和抽象方法,如protocolClassId、protocolMethodId和visit。Method抽象类包含关键方法如hasContent和writeArgumentsTo,用于构建方法帧。文章通过图示解析了toFrame方法的过程,展示了如何将classId、methodId及参数写入帧数据。了解这些内容对于理解AMQP协议的实现至关重要。

其实第14篇已经说了channel源码情况,准备看一下AMQChannel源码,发现有很多依赖其他类,先熟悉一下其他关键类的源码, 我们来熟悉一下Method方法

  • AMQP方法对象的基类,具体实现在AMQP.java 类中

image-20210616193456451

1、 Method接口

1.1、方法

方法名描述
int protocolClassId协议的classid
int protocolMethodId协议方法id
String protocolMethodName协议方法名称

2、Method 抽象类

2.1、方法

方法名描述图示
boolean hasContent判断内容是否存在,如果存在的话就需要调用header和body,否则只需要调用单个方法帧
Object visit(MethodVisitor visitor)访客支持(双调度机制)
void write ArgumentsTo(MethodArgumentWriter writer)写参数方法
void appendArgumentDebugStringTo(buffer)调试使用的
Frame toFrame(int channelNumber)组装一个方法的数据帧,(这是一个模板方法)1

2.2、图示

  1. toFrame 方法

image-20210616200600635

  • 总结

    1. 方法帧先是写classId --> methodId --> 方法参数
    2. toFrame 终极目的就是将classId 和methodId以及方法参数写入到accumlator字节数组中
    3. 具体实现都是在AMQP.java 中
  • 对于Frame操作可以参考Frame 源码分析

2、总结

  1. Method接口和Method抽象类都是模板方法,定义写出的Frame的格式,具体实现需要查看AMQP接口 和 AMQPImpl类,(这个两个类确定具体帧classId,methodId和具体方法参数)
  2. Method的抽象方法主要目的是将方法转换成Frame帧 存在到accumulator的字节数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值