什么是AMQP协议
为了让消息在各个消息队列平台之间互融互通,最开始是通过JMS,通过JMS视同通过Java API的方式隐藏MQ产品供应商提供的实际接口,解决互通问题。从技术上讲java应用程序只需要针对JMS API编程选择适合的MQ驱动即可,
JMS会打理好其他部分,ActiveMQ就是JMS的实现。不过尝试使用单独标准化接口来胶合众多不同的接口最终会暴露出问题。使得应用程序变得更加脆弱。
2006年6月由于Cisco、Redhat、iMatix等联合制定了AMQP的公开标准,它是应用层协议的一个开放标准。rabbit就基于AMQP的关键协议进行实现。
AMQP架构模型 生产者通过routing key投递消息到exchage exchage根据routingKey与binding key映射 路由到投递到具体队列。
AMQP协议三层定义
AMQP协议本身包括三层。
Module Layer:位于协议最高层,主要定义了一些供客户端调用的命令,客户端可以利
用这些命令实现自己的业务逻辑。例如, 客户端可以使用Queue.Declare命令声明
一个队列或者使用Basic.Consume订阅消费一个队列中的消息。
Session Layer:位于中间层, 主要负责将客户端的命令发送给服务器, 再将服务端的应
答返回给客户端,主要为客户端与服务器之间的通信提供可靠性同步机制和错误处理。
Transport Layer:位于最底层,主要传输二进制数据流,提供帧的处理、信道复用、错
误检测和数据表示等。
AMQP说到底还是一个通信协议, 通信协议都会涉及报文交互, 从low-level举例来说,
AMQP本身是应用层的协议, 其填充于TCP协议层的数据部分。而从high-level来说, AMQP
是通过协议命令进行交互的。AM QP协议可以看作一系列结构化命令的集合, 这里的命令代表
一种操作, 类似于HTTP中的方法(GET、POST、PUT、DELETE等) 。