AMQP协议探索

2022-08-11 15:51:18 浏览数 (2)

1.什么是AMQP协议(Advanced Message Queuing Protocol高级消息队列协议)

我们知道HTTP、TCP/IP等等网络通信协议。HTTP就是超文本传输协议,其作为应用层协议最终填充到TCP的报文中,AMQP协议其实也和HTTP协议一样,其报文填充到TCP报文中,所以AMQP协议就是通过这种协议让通信双方知道要做那些事情。比如zoopkeeper就是用ZAB协议,同样都是应用层协议。因此我们如果开发一个有某种规范的网络通信中间件,必然要自己去设计一个规范的网络协议。明白了这一点,我们看一下AMQP协议的有哪些部分。

2.AMQP协议的分层

AMQP协议的边界问题,作者找了半天也没找到。这块复制粘贴一下,主要有两个版本。

AMQP协议包含三层《RabbitMq实战指南》 Modeule layer:位于协议最高层,主要定义一些客户端调用命令,客户端可以利用这些命令实现自己的业务逻辑,例如客户端可以使用Queue.declare声明一个队列或者使用base.consume消费一个队列中的消息。 session layer:位于中间层,主要负责将客户端的命令发送给服务器,再将服务端应答返回给客户端。主要为客户端与服务器之间的通信提供可靠性同步机制和错误处理。 transport layer:位于最底层,主要传输二进制数据流,提供帧的处理,信道复用、错误检测和数据表示等。

https://zhuanlan.zhihu.com/p/147675691 功能层(Functional Layer):定义了一系列的命令 传输层(Transport Layer):携带了从应用 → 服务端的方法,用于处理多路复用、分帧、编码、心跳、data-representation、错误处理。

这块协议分层主要就是为了兼容潜在的其他协议,我们可以将新协议放到AQMP协议的传输层。

3.AMQP协议的模型(AMQP协议主要描述了一个怎么样的数据过程?)

publish就是消息的发送方,负责将消息发送到交换机,交换机将消息按照路由键路由到具体的消息队列中去,负责监听该消息队列的消费者负责消费该消息。

AMQP协议的规范简介

通过上述描述,我们大概知道AMQP到底是个啥,作者这边通过查阅资料搜到了一些AMQP的规范,其实往深入的应该看一下AMQP的协议的实现逻辑。但是感觉有点太深入了。其实也没啥意义,应该都是一些检测并执行相关代码的逻辑。这块的文档地址为:https://www.rabbitmq.com/resources/specs/amqp-xml-doc0-9-1.pdf

AMQP的一些概念的所表达的含义,比如no-ack就表示不需要客户端确认,broker自动当成已经确认,这里还说了这种设置的好处是效率提升,不足就是可能会发生消息的丢失。

AMQP的报错有两类,一类是channel错误,这种报错只会针对当前的channel,另一种报错是connection报错,这种报错会影响该连接的所有channel,并会让关闭连接。

这块用列表的形式描述了不同类的不同方法所表达的含义。当然我们发现AMQP是支持事务的。具体的类是tx。

0 人点赞