第16篇 rabbitmq AMQP接口类源码分析

上面了解一下Method接口和Method抽象类,我们再来了解一下AMQP接口,这个也是AMQP接口确认

  • 大概看一下AMQP接口,分两部分常量部分和静态内部类

1、常量

常量名描述
PROTOCOL.MAJOR0AQMP协议主版本为0
PROTOCOL.MINOR9AQMP协议次版本为9
PROTOCOL.REVISION1AQMP协议修正版本号为1
PROTOCOL.PORT5672AQMP协议默认端口号为5672
FRAME_METHOD1frame(数据帧)表示方法
FRAME_HEADER2frame(数据帧)表示请求头
FRAME_BODY3frame(数据帧)表示主体
FRAME_HEARTBEAT8frame(数据帧)表示心跳检测
FRAME_MIN_SIZE4096frame(数据帧)最小大小
FRAME_END206frame(数据帧)结束帧
REPLY_SUCCESS200回复成功
CONTENT_TOO_LARGE311内容太大
NO_ROUTE312未路由
NO_CONSUMERS313没有消费者
ACCESS_REFUSED403获取拒绝
NOT_FOUND404未找到
RESOURCE_LOCKED405资源锁定
PRECONDITION_FAILED406预检查失败
CONNECTION_FORCED320强制连接
INVALID_PATH402无效路径
FRAME_ERROR501frame(数据帧)错误
SYNTAX_ERROR502语法错误
COMMAND_INVALID503命令无效
CHANNEL_ERROR504通道异常
UNEXPECTED_FRAME505不是预期frame(数据帧)
RESOURCE_ERROR506资源错误
NOT_ALLOWED530不允许
NOT_IMPLEMENTED540未实现
INTERNAL_ERROR541内部异常

2、 内部类

  • 如下图
  • image-20210616212621560

2.1、总结

  • 每个方法几乎有成对的, xxx 和 xxxOk, 只有basic中publish, return, deliver,getEmpty, ack, reject, recoveryAsync, nack 不是成对
  1. Connection类对应AMQP的接口方法,start, secure, tune, open, close, blocked方法
  2. Channel类对应AMQP的接口方法, open, flow, close
  3. Access类对应AMQP的接口方法,request
  4. Exchange类对应AMQP的接口方法,declare, delete, bind, unbind
  5. Queue类对应AMQP的接口方法,declare, delete, bind, unbind,purge
  6. Basic类对应AMQP的接口方法, qos, consume, cancel, publish ,return,deliver, get, getEmpty, ack, reject, recoveryAsync, recover, nack
  7. Tx类对应AQMP的接口方法 select, commit, rollback
  8. Confirm类对应AQMP的接口方法 select

2.2、单个接口方法拆开(以Start为例)

  • 每个类都有定义具体成员变量,然后构建Builder构造器进行构建,以Start为例如下所示

  •  public interface Start extends Method {
                int getVersionMajor();
                int getVersionMinor();
                Map<String,Object> getServerProperties();
                LongString getMechanisms();
                LongString getLocales();
    
                // Builder for instances of Connection.Start
                public static final class Builder
                {
                    private int versionMajor = 0;
                    private int versionMinor = 9;
                    private Map<String,Object> serverProperties;
                    private LongString mechanisms = LongStringHelper.asLongString("PLAIN");
                    private LongString locales = LongStringHelper.asLongString("en_US");
    
                    public Builder() { }
    
                    public Builder versionMajor(int versionMajor)
                    {   this.versionMajor = versionMajor; return this; }
                    public Builder versionMinor(int versionMinor)
                    {   this.versionMinor = versionMinor; return this; }
                    public Builder serverProperties(Map<String,Object> serverProperties)
                    {   this.serverProperties = serverProperties; return this; }
                    public Builder mechanisms(LongString mechanisms)
                    {   this.mechanisms = mechanisms; return this; }
                    public Builder mechanisms(String mechanisms)
                    {   return this.mechanisms(LongStringHelper.asLongString(mechanisms)); }
                    public Builder locales(LongString locales)
                    {   this.locales = locales; return this; }
                    public Builder locales(String locales)
                    {   return this.locales(LongStringHelper.asLongString(locales)); }
                    public Start build() {
                        return new com.rabbitmq.client.impl.AMQImpl.Connection.Start(versionMajor, versionMinor, serverProperties, mechanisms, locales);
                    }
                }
            }
    
  • 其实不同方法构建属性可能不一样,都有一个builder构造器,具体build()都是在AMQImpl中

  • 具体Method抽象接口实现都是在AMQImpl中

  • 其实这个方法是可以借鉴一下,不管具体结果如何我们都是需要构建对象的时候,先在接口定义好构建器,具体方法在实现类去实现。

2.3、BasicProperties 类

  • 待续,下篇在分析BasicProperties类源码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值