第23篇 rabbitmq AMQImpl源码分析

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

  • 第16篇 AMQP接口源码

  • image-20210620160658000

  • 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 INDEX10表示这个子类(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 INDEX11表示这个子类(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 INDEX20表示这个子类(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 INDEX21表示这个子类(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 INDEX30表示这个子类(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 INDEX30表示这个子类(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 INDEX40表示这个子类(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 INDEX41表示这个子类(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 INDEX50表示这个子类(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 INDEX51表示这个子类(methodId)
1.10.2、可能使用场景
  • 关闭连接对象
1.10.3、方法
  • void writeArgumentsTo(MethodArgumentWriter writer)没有属性

1.11、Unblocked类 extend Method implement Unblocked接口

1.11.1、成员变量
字段名默认值是否必填描述
final int INDEX60表示这个子类(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 INDEX61表示这个子类(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 INDEX10表示这个子类(methodId)
final String outOfBandTODO
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 INDEX11表示这个子类(methodId)
final LongString channelIdTODO
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 INDEX20表示这个子类(methodId)
final boolean activeTODO(是否激活状态)
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 INDEX20表示这个子类(methodId)
final boolean activeTODO(是否激活状态)
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 INDEX40表示这个子类(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 INDEX41表示这个子类(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 INDEX10表示这个子类(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 INDEX10表示这个子类(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 INDEX10表示这个子类(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 INDEX11表示这个子类(methodId)
4.2.2、可能使用场景
  • 声明交换器
4.2.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer) 不支持

4.3、Delete类 extend Method implement Delete接口

4.3.1、成员变量
字段名默认值是否必填描述
final int INDEX20表示这个子类(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 INDEX21表示这个子类(methodId)
4.4.2、可能使用场景
  • 声明交换器
4.4.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer) 不支持

4.5、Bind类 extend Method implement Bind接口

4.5.1、成员变量
字段名默认值是否必填描述
final int INDEX30表示这个子类(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 INDEX31表示这个子类(methodId)
4.6.2、可能使用场景
  • 绑定交换器
4.6.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer) 不支持

4.7、UnBind类 extend Method implement UnBind接口

4.7.1、成员变量
字段名默认值是否必填描述
final int INDEX40表示这个子类(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 INDEX31表示这个子类(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 INDEX10表示这个子类(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 INDEX11表示这个子类(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 INDEX20表示这个子类(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 INDEX21表示这个子类(methodId)
5.4.2、可能使用场景
  • 绑定队列
5.4.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer) 不支持

5.5、Purge类 extend Method implement Purge接口

5.5.1、成员变量
字段名默认值是否必填描述
final int INDEX30表示这个子类(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 INDEX31表示这个子类(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 INDEX40表示这个子类(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 INDEX41表示这个子类(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 INDEX50表示这个子类(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 INDEX51表示这个子类(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 INDEX10表示这个子类(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 INDEX11表示这个子类(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 INDEX20表示这个子类(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 INDEX21表示这个子类(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 INDEX30表示这个子类(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 INDEX31表示这个子类(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 INDEX40表示这个子类(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 INDEX50表示这个子类(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 INDEX60表示这个子类(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 INDEX70表示这个子类(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 INDEX71表示这个子类(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 INDEX72表示这个子类(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 INDEX80表示这个子类(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 INDEX90表示这个子类(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 INDEX100表示这个子类(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 INDEX110表示这个子类(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 INDEX110表示这个子类(methodId)
6.17.2、可能使用场景
  • 同步恢复
6.17.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer) 不支持

6.18、Nack类 extend Method implement Nack接口

6.18.1、成员变量
字段名默认值是否必填描述
final int INDEX120表示这个子类(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 INDEX10表示这个子类(methodId)
7.1.2、可能使用场景
  • 选择事务
7.1.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer)不支持

7.2、SelectOk类 extend Method implement SelectOk接口

7.2.1、成员变量
字段名默认值是否必填描述
final int INDEX11表示这个子类(methodId)
7.2.2、可能使用场景
  • 选择事务
7.2.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer)不支持

7.3、Commit类 extend Method implement Commit接口

7.3.1、成员变量
字段名默认值是否必填描述
final int INDEX20表示这个子类(methodId)
7.3.2、可能使用场景
  • 提交事务
7.3.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer)不支持

7.4、CommitOk类 extend Method implement CommitOk接口

7.4.1、成员变量
字段名默认值是否必填描述
final int INDEX21表示这个子类(methodId)
7.4.2、可能使用场景
  • 提交事务
7.4.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer)不支持

7.5、Rollback类 extend Method implement Rollback接口

7.5.1、成员变量
字段名默认值是否必填描述
final int INDEX30表示这个子类(methodId)
7.5.2、可能使用场景
  • 回滚事务
7.5.3、方法
  • 基本跟Start类似
  • void writeArgumentsTo(MethodArgumentWriter writer)不支持

7.6、RollbackOk类 extend Method implement RollbackOk接口

7.6.1、成员变量
字段名默认值是否必填描述
final int INDEX31表示这个子类(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 INDEX10表示这个子类(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 INDEX11表示这个子类(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、总结

  1. 主要了解method的具体实现,不同指令它属性不一样
  2. 也算有个大概印象,到时候看具体逻辑可能联系到这里来
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值