算是终于去看到AMQImpl源码,也就具体Method实现,AMQP一些指令做一些了解,第16篇你可以了解AMQP接口源码,有个大致了解
-

-
1-8 就是具体Method的指令的实现,具体目标就是实现Method 和 Frame互转
-
9-10,遍历属性类,目前是不支持遍历
-
11 Frame (DataInputStream)–> Method, 将具体流变成指令方法 (使用MethodArgumentWriter/Reader)
-
12 Frame (DataInputStream)–> ContentHeader, 将具体流变成请求头属性(使用的是ContentHeaderPropertyWriter/Reader)
-
约定一下
- 第一个Connection 中Start会稍微描述详细一样,后面一般都是属性不同而已,所有简单带过
1、Connection类
-
连接有关的指令
-
属性: INDEX=10, 回忆一下Method接口就明白了,那个protocolClassId就是这个值
1.1、Start类 extend Method implement Start接口
- Method主要是定义
- protocolClassId() 那个类下面(这里说明是Connection类下面的)
- protocolMethodId() 某个类的子类(这里是Start类)
- protocolMethodName() (类名小写用点连接,例如connection.start)
- hasContent() 判断该指令是否内容信息
- visit(MethodVisitor rdr) 访问对象返回一个Object
- appendArgumentDebugStringTo(StringBuilder acc) 调试使用
- writeArgumentsTo(MethodArgumentWriter writer) 将属性写入到Frame流中(确定写入属性顺序和字段)
- Start接口
- 定义Builder构造器(用于收集构建Start属性参数),其实慢慢理解接口含义,定义模板或者说定义功能,不关心实现
- 抽象属性的getter方法
1.1.2、属性字段
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final int versionMajor | 服务端AMQP协议主版本 | ||
| final int versionMinor | 服务端AMQP协议次版本 | ||
| final Map<String, Object> serverProperties | 服务端属性参数 | ||
| LongString mechanisms | 必填 | 服务器机制(目前没有没有理解) | |
| LongString locales | 必填 | 服务端语言环境 |
1.1.3、方法
| 方法名 | 描述 | 图示 |
|---|---|---|
| Start(各个属性) | 构造方法,根据各个属性构建Start | |
| Start(MethodArgumentReader rdr) | 构造方法,根据流进行构建(Frame)Start | |
| @Override boolean equals(Object) | 重写equals方法,每个属性必须相等 | |
| @Override int hashCode() | 重写hashCode方法,jdk默认(每个属性乘以31 | |
| void writeArgumentsTo(MethodArgumentWriter writer) | 写属性顺序(默认跟属性列表一样) 1、versionMajor 2、versionMinor 3、serverProperties 4、mechanisms 5、locales |
1.1.4、可能使用场景
- 服务端回客户端信息(基本属性)
1.2、StartOk类 extend Method implement StartOk接口
1.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) | |
| Map<String,Object> clientProperties | 必填 | 客户端属性 | |
| String mechanism | 必填 | 机制 | |
| LongString response | 必填 | 登录用户名(凭证) | |
| String locale | 本地语言环境(默认en_US) |
1.2.2、可能使用场景
- 客户端在连接服务端时候,发送客户端基本属性信息
1.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.3、Secure类 extend Method implement Secure接口 (TODO)
1.3.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) | |
| final LongString challenge | 必填 |
1.3.2、可能使用场景
- 未知(TODO)
1.3.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.4、SecureOk类 extend Method implement SecureOk接口 (TODO)
1.4.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 21 | 表示这个子类(methodId) | |
| final LongString challenge | 必填 |
1.4.2、可能使用场景
- 未知(TODO)
1.4.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.5、Tune类 extend Method implement Tune接口 (TODO)
1.5.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 30 | 表示这个子类(methodId) | |
| final int channelMax | 通道最大数 | ||
| final int frameMax | 帧大小最大 | ||
| final int heartbeat | 心跳频率 |
1.5.2、可能使用场景
- 未知(TODO)目前猜测是获取关键变量参数
1.5.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.6、TuneOk类 extend Method implement TuneOk接口 (TODO)
1.6.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 30 | 表示这个子类(methodId) | |
| final int channelMax | 通道最大数 | ||
| final int frameMax | 帧大小最大 | ||
| final int heartbeat | 心跳频率 |
1.6.2、可能使用场景
- 未知(TODO)目前猜测是获取关键变量参数
1.6.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.7、Open类 extend Method implement Open接口
1.7.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 40 | 表示这个子类(methodId) | |
| final String virtualHost | 必填 | 虚拟主机 | |
| final String capabilities | 必填 | 能力(目前不知道做啥) | |
| final boolean insist | 持久(TODO) |
1.7.2、可能使用场景
- 连接服务端时候
1.7.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.8、OpenOk类 extend Method implement OpenOk接口
1.8.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 41 | 表示这个子类(methodId) | |
| final String knownHosts | 必填 | 虚拟主机 |
1.8.2、可能使用场景
- 连接服务端返回
1.8.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.9、Close类 extend Method implement Close接口
1.9.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 50 | 表示这个子类(methodId) | |
| final in replyCode | 回应编号 | ||
| final String replyText | 必填 | 回应文本 | |
| final int classId | |||
| final int methodId |
1.9.2、可能使用场景
- 关闭连接对象
1.9.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.10、CloseOk类 extend Method implement CloseOk接口
1.10.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 51 | 表示这个子类(methodId) |
1.10.2、可能使用场景
- 关闭连接对象
1.10.3、方法
- void writeArgumentsTo(MethodArgumentWriter writer)没有属性
1.11、Unblocked类 extend Method implement Unblocked接口
1.11.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 60 | 表示这个子类(methodId) | |
| final String reason | 原因 |
1.11.2、可能使用场景
- 阻塞连接
1.11.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
1.12、UnblockedOk类 extend Method implement UnblockedOk接口
1.12.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 61 | 表示这个子类(methodId) |
1.12.2、可能使用场景
- 阻塞连接对象
1.12.3、方法
- void writeArgumentsTo(MethodArgumentWriter writer)没有属性
2、Channel
-
通道有关的指令
-
属性: INDEX=20
2.1、Open类 extend Method implement Open接口
2.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final String outOfBand | TODO |
2.1.2、可能使用场景
- TODO
2.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
2.2、OpenOk类 extend Method implement OpenOk接口
2.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) | |
| final LongString channelId | TODO |
2.2.2、可能使用场景
- TODO
2.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
2.3、Flow类 extend Method implement Flow接口
2.3.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) | |
| final boolean active | TODO(是否激活状态) |
2.3.2、可能使用场景
- TODO
2.3.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
2.4、FlowOk类 extend Method implement FlowOk接口
2.4.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) | |
| final boolean active | TODO(是否激活状态) |
2.4.2、可能使用场景
- TODO
2.4.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
2.5、Close类 extend Method implement Close接口
2.5.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 40 | 表示这个子类(methodId) | |
| final in replyCode | 回应编号 | ||
| final String replyText | 必填 | 回应文本 | |
| final int classId | |||
| final int methodId |
2.5.2、可能使用场景
- 关闭连接对象
2.5.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
2.6、CloseOk类 extend Method implement CloseOk接口
2.6.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 41 | 表示这个子类(methodId) | |
2.6.2、可能使用场景
- 关闭连接对象
2.6.3、方法
- void writeArgumentsTo(MethodArgumentWriter writer)没有属性
3、Access
-
权限有关的指令
-
属性: INDEX=30
3.1、Request类 extend Method implement Request接口
3.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final String realm | 必填 | TODO | |
| boolean exclusive | |||
| boolean passive | |||
| boolean active | |||
| boolean write | |||
| boolean read |
3.1.2、可能使用场景
- 请求权限
3.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
3.2、RequestOk类 extend Method implement RequestOk接口
3.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final int ticket |
3.2.2、可能使用场景
- 请求权限(有没有类似Token的票据)
3.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
4、Exchange
-
交换器有关的指令
-
属性: INDEX=40
4.1、Declare类 extend Method implement Declare接口
4.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String exchange | 交换器 | ||
| final String type | 类型 | ||
| final boolean passive | |||
| final boolean durable | |||
| final boolean autoDelete | 是否自动删除 | ||
| final boolean internal | |||
| final boolean nowait | |||
| final Map<String, Object> arguments |
4.1.2、可能使用场景
- 声明交换器
4.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
4.2、DeclareOk类 extend Method implement DeclareOk接口
4.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) |
4.2.2、可能使用场景
- 声明交换器
4.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
4.3、Delete类 extend Method implement Delete接口
4.3.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String exchange | 交换器 | ||
| final boolean ifUnused | 类型 | ||
| final boolean nowait |
4.3.2、可能使用场景
- 删除交换器
4.3.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
4.4、DeleteOk类 extend Method implement DeleteOk接口
4.4.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 21 | 表示这个子类(methodId) |
4.4.2、可能使用场景
- 声明交换器
4.4.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
4.5、Bind类 extend Method implement Bind接口
4.5.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 30 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String destination | 必填 | 目的地 | |
| final String source | 必填 | ||
| final String routingKey | 必填 | ||
| final boolean nowait | |||
| final Map<String, Object> arguments |
4.5.2、可能使用场景
- 绑定交换器
4.5.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
4.6、BindOk类 extend Method implement BindOk接口
4.6.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 31 | 表示这个子类(methodId) |
4.6.2、可能使用场景
- 绑定交换器
4.6.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
4.7、UnBind类 extend Method implement UnBind接口
4.7.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 40 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String destination | 必填 | 目的地 | |
| final String source | 必填 | ||
| final String routingKey | 必填 | ||
| final boolean nowait | |||
| final Map<String, Object> arguments |
4.7.2、可能使用场景
- 取消绑定交换器
4.7.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
4.8、UnBindOk类 extend Method implement UnBindOk接口
4.8.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 31 | 表示这个子类(methodId) |
4.8.2、可能使用场景
- 取消绑定交换器
4.8.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
5、Queue
-
队列有关的指令
-
属性: INDEX=50
5.1、Declare类 extend Method implement Declare接口
5.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String queue | 交换器 | ||
| final boolean passive | |||
| final boolean durable | |||
| final boolean exclusive | |||
| final boolean autoDelete | 是否自动删除 | ||
| final boolean nowait | |||
| final Map<String, Object> arguments |
5.1.2、可能使用场景
- 声明队列
5.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.2、DeclareOk类 extend Method implement DeclareOk接口
5.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) | |
| final String queue | |||
| final int messageCount | |||
| final int consumerCount |
5.2.2、可能使用场景
- 声明队列
5.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.3、Bind类 extend Method implement Bind接口
5.3.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String queue | 必填 | 队列 | |
| final String exchange | 必填 | 交换器 | |
| final String routingKey | 必填 | ||
| final boolean nowait | |||
| final Map<String, Object> arguments |
5.3.2、可能使用场景
- 绑定队列
5.3.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.4、BindOk类 extend Method implement BindOk接口
5.4.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 21 | 表示这个子类(methodId) |
5.4.2、可能使用场景
- 绑定队列
5.4.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
5.5、Purge类 extend Method implement Purge接口
5.5.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 30 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String queue | 必填 | 队列 | |
| final boolean nowait |
5.5.2、可能使用场景
- TODO
5.5.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.6、PurgeOk类 extend Method implement PurgeOk接口
5.6.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 31 | 表示这个子类(methodId) | |
| final int messageCount | 消息数量 |
5.6.2、可能使用场景
- TODO
5.6.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.7、Delete类 extend Method implement Delete接口
5.7.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 40 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String queue | 必填 | 队列 | |
| final boolean ifUnused | |||
| final boolean nowait | |||
| final boolean nowait |
5.7.2、可能使用场景
- 删除队列
5.7.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.8、DeleteOk类 extend Method implement DeleteOk接口
5.8.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 41 | 表示这个子类(methodId) | |
| final int messageCount | 消息 |
5.8.2、可能使用场景
- 删除队列
5.8.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.9、Unbind类 extend Method implement Unbind接口
5.9.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 50 | 表示这个子类(methodId) | |
| final int ticket | 访问的票据 | ||
| final String queue | 必填 | 队列 | |
| final String exchange | 必填 | 交换器 | |
| final String routingKey | 必填 | ||
| Map<String, Object> arguments |
5.9.2、可能使用场景
- 解绑队列
5.9.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
5.10、UnbindOk类 extend Method implement UnbindOk接口
5.10.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 51 | 表示这个子类(methodId) |
5.10.2、可能使用场景
- 解绑队列
5.10.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
6、Basic
-
基础有关的指令
-
属性: INDEX=60
6.1、Qos类 extend Method implement Qos接口
6.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final int prefetchSize | |||
| final int prefetchCount | |||
| final boolean global |
6.1.2、可能使用场景
- qos信号
6.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.2、Qos类 extend Method implement Qos接口
6.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) |
6.2.2、可能使用场景
- qos信号
6.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
6.3、Consume类 extend Method implement Consume接口
6.3.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) | |
| final int ticket | |||
| final String queue | 必填 | ||
| final String consumerTag | 必填 | 消费标签 | |
| boolean noLocal | |||
| boolean noAck | |||
| boolean exclusive | |||
| boolean nowait | |||
| Map<String, Object> arguments |
6.3.2、可能使用场景
- 消费者消费消息
6.3.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.4、ConsumeOk类 extend Method implement ConsumeOk接口
6.4.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 21 | 表示这个子类(methodId) | |
| final String consumerTag | 必填 | 消费标签 |
6.4.2、可能使用场景
- 消费者消费消息
6.4.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.5、Cancel类 extend Method implement Cancel接口
6.5.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 30 | 表示这个子类(methodId) | |
| final String consumerTag | 必填 | 消费标签 | |
| final boolean nowait |
6.5.2、可能使用场景
- 取消消费
6.5.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.6、CancelOk类 extend Method implement CancelOk接口
6.6.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 31 | 表示这个子类(methodId) | |
| final String consumerTag | 必填 | 消费标签 |
6.6.2、可能使用场景
- 取消消费
6.6.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.7、Pulish类 extend Method implement Pulish接口
6.7.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 40 | 表示这个子类(methodId) | |
| final int ticket | |||
| final String exchange | 必填 | ||
| final String routingKey | 必填 | ||
| final boolean mandatory | |||
| final boolean imediate |
6.7.2、可能使用场景
- 发布消息
6.7.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.8、Return类 extend Method implement Return接口
6.8.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 50 | 表示这个子类(methodId) | |
| final int replyCode | |||
| final String replyText | 必填 | ||
| final String exchange | 必填 | ||
| final String routingKey | 必填 |
6.8.2、可能使用场景
- TODO
6.8.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.9、Deliver类 extend Method implement Deliver接口
6.9.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 60 | 表示这个子类(methodId) | |
| final String consumerTag | 必填 | ||
| final long deliveryTag | |||
| final boolean redelivered | |||
| final String exchange | 必填 | ||
| final String routingKey | 必填 |
6.9.2、可能使用场景
- 传输消息
6.9.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.10、Get类 extend Method implement Get接口
6.10.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 70 | 表示这个子类(methodId) | |
| final int ticket | |||
| final String queue | 必填 | ||
| boolean noAck |
6.10.2、可能使用场景
- 获取消息
6.10.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.11、GetOk类 extend Method implement GetOk接口
6.11.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 71 | 表示这个子类(methodId) | |
| final long deliveryTag | |||
| final boolean redelivered | |||
| final String exchange | 必填 | ||
| final String routingKey | 必填 | ||
| final int messageCount |
6.11.2、可能使用场景
- 获取消息
6.11.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.12、GetEmpty类 extend Method implement GetEmpty接口
6.12.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 72 | 表示这个子类(methodId) | |
| final String clusterId | 集群id |
6.12.2、可能使用场景
- TODO
6.12.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.13、Ack类 extend Method implement Ack接口
6.13.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 80 | 表示这个子类(methodId) | |
| final long deliveryTag | |||
| boolean multiple |
6.12.2、可能使用场景
- ack 回信息
6.13.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.14、Reject类 extend Method implement Reject接口
6.14.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 90 | 表示这个子类(methodId) | |
| final long deliveryTag | |||
| boolean requeue | 是否重新入队 |
6.14.2、可能使用场景
- 拒绝消息
6.14.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.15、RecoverAsync类 extend Method implement RecoverAsync接口
6.15.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 100 | 表示这个子类(methodId) | |
| final boolean requeue | 重新入队 |
6.15.2、可能使用场景
- 异步恢复
6.15.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.16、Recover类 extend Method implement Recover接口
6.16.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 110 | 表示这个子类(methodId) | |
| final boolean requeue | 重新入队 |
6.16.2、可能使用场景
- 同步恢复
6.16.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
6.17、RecoverOk类 extend Method implement RecoverOk接口
6.17.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 110 | 表示这个子类(methodId) |
6.17.2、可能使用场景
- 同步恢复
6.17.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 不支持
6.18、Nack类 extend Method implement Nack接口
6.18.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 120 | 表示这个子类(methodId) | |
| final long deliveryTag | |||
| final boolean multiple | |||
| final boolean requeue |
6.18.2、可能使用场景
- TODO
6.18.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer) 写属性顺序和成员变量表一样(去掉INDEX常量)
7、Tx
-
事务有关的指令
-
属性: INDEX=90
7.1、Select类 extend Method implement Select接口
7.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) |
7.1.2、可能使用场景
- 选择事务
7.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
7.2、SelectOk类 extend Method implement SelectOk接口
7.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) |
7.2.2、可能使用场景
- 选择事务
7.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
7.3、Commit类 extend Method implement Commit接口
7.3.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 20 | 表示这个子类(methodId) |
7.3.2、可能使用场景
- 提交事务
7.3.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
7.4、CommitOk类 extend Method implement CommitOk接口
7.4.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 21 | 表示这个子类(methodId) |
7.4.2、可能使用场景
- 提交事务
7.4.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
7.5、Rollback类 extend Method implement Rollback接口
7.5.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 30 | 表示这个子类(methodId) |
7.5.2、可能使用场景
- 回滚事务
7.5.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
7.6、RollbackOk类 extend Method implement RollbackOk接口
7.6.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 31 | 表示这个子类(methodId) |
7.6.2、可能使用场景
- 回滚事务
7.6.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
8、Confirm
-
确认有关的指令
-
属性: INDEX=85
8.1、Select类 extend Method implement Select接口
8.1.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 10 | 表示这个子类(methodId) | |
| final boolean nowait |
8.1.2、可能使用场景
- 选择确认
8.1.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)写属性顺序和成员变量表一样(去掉INDEX常量)
8.2、SelectOk类 extend Method implement SelectOk接口
8.2.1、成员变量
| 字段名 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|
| final int INDEX | 11 | 表示这个子类(methodId) |
8.2.2、可能使用场景
- 选择确认
8.2.3、方法
- 基本跟Start类似
- void writeArgumentsTo(MethodArgumentWriter writer)不支持
9、MethodVisitor
- 遍历每个Method实现
10、DefaultMethodVisitor
- MethodVisitor默认实现, 也就不支持Visit操作
11、readMethodFrom方法
-
采用switch case, 两层switch case
-
int classId = in.readShort(); int methodId = in.readShort(); -
根据classId 和methodId确定创建那个实现Method对象
12、readContentHeaderFrom方法
-
int classId = in.readShort(); -
classId == 60 才是基础内容头部属性
13、总结
- 主要了解method的具体实现,不同指令它属性不一样
- 也算有个大概印象,到时候看具体逻辑可能联系到这里来
本文深入解析了AMQP协议中的Method实现,包括Connection、Channel、Access、Exchange、Queue和Basic等指令,详细介绍了各指令的属性、方法及应用场景,如Start、StartOk、Close等方法的使用,以及MethodArgumentWriter/Reader在转换Frame和Method过程中的作用。通过阅读源码,可以更好地理解和应用AMQP协议。
607

被折叠的 条评论
为什么被折叠?



