第17篇 rabbitmq BasicProperties 源码分析

上一级分析一下rabbitmqAMQP接口的源码,AMQP接口源码中还有一个BasicProperties内部类没有仔细分析,这节做这件事情,让我们开始

image-20210617114909286

1、Cloneable (克隆)

  • 复制,它是一个形容词,具备某种能力,这个接口没有具体的方法,代表它具有克隆对象功能

2、ContentHeader 接口

  • 内容头部接口

2.1、方法

方法名描述
int getClassId获取类id
String getClassName获取类名称
void appendPropertyDebugStringTo(StringBuilder buffer)debug使用

3、AMQContentHeader (抽象类)

  • 它实现了ContentHeader接口

3.1、成员变量

变量名默认值描述
long bodySize0frame的内容大小
方法名描述图示
AMQContentHeader()无参构造方法
AMQContentHeader(DataInputStream in)有一个参数构造方法
in.readShort 权重
in.readLong 内容大小
long getBodySize返回bodySize
abstract void writePropertiesTo (ContentHeaderPropertyWriter writer)抽象方法,写头部内容信息
void appendPropertyDebugStringTo(StringBuilder buffer)debug使用实现了
Frame toFrame(int chanelNumber, long bodySize)变成toFrame1
Object clone()实现父类clone方法

3.2、图示

  • image-20210617135958155

4、BasicProperties 接口

  • 基本接口方法 (都是属性的GET方法接口)

4.1、方法

方法名描述
String getContentType()取出contentType字段
String getContentEncoding()取出contentEncoding字段
Map<String, Object> getHeaders()取出请求头的参数以map形式返回
Integer getDeliveryMode()取出deliveryMode字段
Integer getPriority()取出priority字段
String getCorrelationId()取出correlationId字段
String getReplyTo()取出replyTo字段
String getExpiration()取出expiration字段
String getMessageId()获取messageId字
Date getTimestamp()获取timestamp字段
String getType()获取type字段
String getUserId()获取userId字段
String getAppId()获取appId字段

5、AMQBasicProperties 抽象类

  • 提供两个构造方法,一个是无参和一个带DataInputStream 入参
  • 重写clone()方法,取出也是super.clone

6、BasicProperties

6.1、成员变量

  • 字段名默认值描述
    String contentType内容类型
    String contentEncoding内容编码
    Map<String, Object> headers请求头信息
    Integer deliveryMode传输模式
    Integer priority优先级
    String correlationId关联id
    String replyTo回应
    String expiration失效
    String messageId消息id
    Date timestamp时间戳
    String type类型
    String userId用户id
    String appId应用id
    String clusterId集群id

6.2、方法

方法名描述图示
BasicProperties(全部成员)全部成员变量的构造方法,对应不变集合一般会用Collection.unmodifiableXXX包一下
BasicProperties(DataInputStream in )DataInputStream入参的构造方法, 先预读一波判断是否有存在该字段,然后才正式读取内容
BasicProperties()无参构造方法
int getClassId()类id 返回60
String getClassName类名称为 “basic”
boolean equals(Object o)所有成员字段都必须相等
int hashCode()所有字段hash
Builder builder()创建一个构建器
对于BasicProperties get方法就是返回对于成员变量
void writeProperites(ContentHeaderPropertyWriter writer)写属性,先写present boolean值(这个字段是否存在)
void appendPropertyDebugStringTo(StringBuilder acc)调试使用

6.3、内部类

  1. Builder 构建器类
    • 主要是构建这些属性

7、总结

  1. 值得学习还是建造者的设计模式
  2. 有点疑惑的是为啥get方法需要先定义一个接口
  3. 现在有大致印象了,但是问题写这些字段写到DataInputStream 是否规则ContentHeaderPropertyWriter 和ContentHeaderPropertyReader,以及ValueReader和ValueWriter, 看怎么对DataOutputStream进行封装
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值