欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

欢迎跳转到本文的原文链接:https://honeypps.com/mq/rabbitmq-client-source-code-of-frame/


Frame是指AMQP协议层面的通信帧(一个正式定义的连接数据包)。
我们来看下Frame类中的成员变量有哪些:

/** Frame type code */
public final int type;/** Frame channel number, 0-65535 */
public final int channel;/** Frame payload bytes (for inbound frames) */
private final byte[] payload;/** Frame payload (for outbound frames) */
private final ByteArrayOutputStream accumulator;

Frame里的三个成员变量:type, channel, payload是真正和报文有关的。accumulator是为了方便内部编程的一个变量。Frame类就是对这个玩意儿捯饬捯饬,没有什么难度,好奇的同学可以自己翻看下,本文主要来阐述下AMQP中的Frame的一些信息。

一个通信帧的协议层面的结构如下:

序号 名称 占用字节
1 frame type 1B
2 channel number 2B
3 payload length 4B
4 payload [0-N]B
5 FRAME_END(结束帧) 1B(0xCE)

这样可以知道:一个通信帧的最小大小为:1B+2B+4B+0B+1B=8B.

AMQP 定义了如下的帧类型:

  1. Type = 1, “METHOD”: 方法帧
  2. Type = 2, “HEADER”: 内容头帧
  3. Type = 3, “BODY”: 内容体帧.
  4. Type = 8, “HEARTBEAT”: 心跳帧.

通道编号为0的代表全局连接中的所有帧,1-65535代表特定通道的帧.

方法帧
type=1, payload包含以下内容:
classId:2B
methodId:2B
argument:NB

内容头帧
type=2,payload包含以下内容
classId:2B
weight:2B
BodySize:8B
property flags:2B
properties: NB

内容帧
type=3, payload不进行具体解析,

心跳帧
tpye=8,没有payload。心跳帧的channel number必须为0。


附:本系列全集

  1. [Conclusion]RabbitMQ-客户端源码之总结
  2. [一]RabbitMQ-客户端源码之ConnectionFactory
  3. [二]RabbitMQ-客户端源码之AMQConnection
  4. [三]RabbitMQ-客户端源码之ChannelManager
  5. [四]RabbitMQ-客户端源码之Frame
  6. [五]RabbitMQ-客户端源码之AMQChannel
  7. [六]RabbitMQ-客户端源码之AMQCommand
  8. [七]RabbitMQ-客户端源码之AMQPImpl+Method
  9. [八]RabbitMQ-客户端源码之ChannelN
  10. [九]RabbitMQ-客户端源码之Consumer

欢迎跳转到本文的原文链接:https://honeypps.com/mq/rabbitmq-client-source-code-of-frame/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


[四]RabbitMQ-客户端源码之Frame相关推荐

  1. RabbitMQ 客户端源码系列 - Channel

    前言 续上次分享 RabbitMQ 客户端源码系列 - Connection ,继续分享Channel相关的源码分析 (com.rabbitmq:amqp-client:4.8.3) 友情提醒:本次分 ...

  2. RabbitMQ初步到精通-第十章-RabbitMQ之Spring客户端源码

    目录 第十章-RabbitMQ之Spring客户端源码 1. 前言 2. 客户端消费代码 2.1 消费的实现方式 2.2 消费中注解解释 2.3 推测Spring实现过程 3.MQ消费源码分析 3.1 ...

  3. Spring源码深度解析(郝佳)-学习-Spring消息-整合RabbitMQ及源码解析

      我们经常在Spring项目中或者Spring Boot项目中使用RabbitMQ,一般使用的时候,己经由前人将配置配置好了,我们只需要写一个注解或者调用一个消息发送或者接收消息的监听器即可,但是底 ...

  4. Android音频实时传输与播放(四):源码下载(问题更新)【转】

    Android音频实时传输与播放(四):源码下载(问题更新) 激动人心的时刻到了有木有 ^_^ 服务端下载请点击这里,客户端下载请点击这里! 最近有朋友在下载源码使用之后,说播放出来的声音噪声很大.其 ...

  5. grpc-go客户端源码分析

    grpc-go客户端源码分析 代码讲解基于v1.37.0版本. 和grpc-go服务端源码分析一样,我们先看一段示例代码, const (address = "localhost:50051 ...

  6. 第十四课 k8s源码学习和二次开发原理篇-调度器原理

    第十四课 k8s源码学习和二次开发原理篇-调度器原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第十四课 k8s源码学习和二次开发原理篇-调度器原理 第一节 ...

  7. ZooKeeper客户端源码(零)——客户端API使用

    首发CSDN:徐同学呀,原创不易,转载请注明源链接.我是徐同学,用心输出高质量文章,希望对你有所帮助. 本篇源码基于ZooKeeper3.7.0版本. 一.建立连接和会话 客户端可以通过创建一个 Zo ...

  8. Netty(四) 简化版Netty源码

    简化版Netty源码 netty学习目录 一.Netty(一) NIO例子 二.Netty(二) netty服务端 三.Netty(三) Netty客户端+服务端 四.Netty(四) 简化版Nett ...

  9. Libcurl的编译_HTTP/HTTPS客户端源码示例

    HTTP/HTTPS客户端源码示例 环境:  zlib-1.2.8  openssl-1.0.1g  curl-7.36 Author:  Kagula LastUpdateDate: 2016-05 ...

最新文章

  1. 配置Citrix Receiver 3.x、4.x支持添加HTTP站点
  2. Jupyter安装r内核
  3. oracle安装及使用常见错误
  4. 玩游戏计算机缺失msvcp140,玩英雄联盟提示电脑缺少msvcp140.dll怎么办
  5. 24-Logistic Regression
  6. Java反序列化漏洞通用利用分析
  7. SEO是什么?SEO的作用?SEO的推广特点?
  8. 电脑配置Java环境变量之后,在cmd中仍然无法识别
  9. 程序员的基本功是什么?
  10. 用单片机测量流体流速的_一种测量管道内流体流速的传感器的制作方法
  11. matlab单层感知器画线,使用MATLAB编写单层感知器
  12. 计算机的安全保障机制,技术安全保障管理制度
  13. C4D动画如何提交云渲染农场快速渲染?
  14. 演化策略(Evolutionary Strategies)
  15. 十二烷基硫酸钠(SDS)将Fe3O4磁性纳米粒子定量地修饰到多壁碳纳米管|化学试剂
  16. 如何删除在System中打开的iso文件
  17. 软件设计师必考精华 - 下午答题
  18. Demo---progress-steps------ 2/50(详解)
  19. ucos系统使用delay函数死机原因
  20. 基础web制作网页的学习 HTML

热门文章

  1. sketchup作品_18级园林工程技术专业课程实训作品展
  2. _Linux 的文件系统及文件缓存知识点整理
  3. iOS SAX解析XML
  4. Android打包(一)
  5. Spring+Quartz实现定时任务
  6. 存储变革 IBM V5000四大优势助用户破旧立新
  7. Ubuntu 12.04 安装g++ arm交叉编译环境
  8. VMware推出TrustPoint产品,完善终端用户计算方案
  9. Android开发学习:在Eclipse中导入Android项目方法
  10. CodeForces - 1557D Ezzat and Grid(线段树+dp)