高级消息队列协议
高级消息队列协议即Advanced Message Queuing Protocol(AMQP)是面向消息中间件提供的开放的应用层协定,其设计目标是对于消息的排序、路由(包括点对点和订阅-发布)、保持可靠性、保证安全性[1]。AMQP规范了消息传递方和接收方的行为,以使消息在不同的提供商之间实现互操作性,就像SMTP,HTTP,FTP等协议可以创建交互系统一样。与先前的中间件标准(如Java消息服务)不同的是,JMS在特定的API接口层面和实现行为上进行了统一,而高级消息队列协议则关注于各种消息如何以字节流的形式进行传递。因此,使用了符合协议实现的任意应用程序之间可以保持对消息的创建、传递。
概述
[编辑]高级消息队列协议是一种二进制应用层协议,用于应对广泛的面向消息应用程序的支持。协议提供了消息流控制,保证的一个消息对象的传递过程,如至多一次、保证多次、仅有一次等,和基于SASL和TLS的身份验证和消息加密.
高级消息队列协议对于实现有如下规定
- 类型系统
- 对称的异步消息传递
- 标准的、可扩展的消息格式
- 标准的、可扩展的消息存储池
历史
[编辑]高级消息队列协议最早在2003年由John O'Hara在摩根大通提出。初始设计方案在2004年中至2006年中由摩根大通发布,由iMatix公司编写协议文档和一个C语言实现。2005年摩根大通推动了包括思科系统、红帽公司、iMatix、IONA技术等公司组成了一个工作组。摩根大通和红帽公司合作开发了Apache Qpid,该客户端最初由Java编写,后转向C++;Rabbit技术公司独立用Erlang开发了RabbitMQ。
早先版本的协议包括版本0-8,2006年6月发布;版本0-9,2006年12月发布;版本0-9-1,2008年11月发布。这些版本与后来的1.0系列有很大的不同。
2011年8月,高级消息队列协议工作组公布其改组方案,作为OASIS成员运作。高级消息队列协议1.0版本在2011年10月30日发表。该版本在2014年四月成为ISO/IEC国际标准。[2]
版本 1.0
[编辑]类型系统
[编辑]协议制定了一种自描述的编码方案,以用于保证在许多广泛使用的类型之前的互操作性。其允许有类型的数据使用额外的信息进行注释;如一个字符串可以注释成为一个URL地址。类似的,一种用于保存‘姓名’和‘地址’的键值对映射表格可以注释用来保存另外一种类型。
链路协议
[编辑]协议的基本单元是 frame (帧)。以下有9种帧结构用来开启、控制、关闭两点之间的信息传输链路。
- 打开(链接)
- 开始(会话)
- 附加到(链路)
- 传输
- 数据流动
- 消息处理
- 分离(链路)
- 结束(会话)
- 关闭(链接)
实现
[编辑]高级消息队列 1.0
[编辑]- Apache Qpid, Apache软件基金会的一个开源项目
- Apache ActiveMQ, Apache软件基金会的一个开源项目
1.0之前
[编辑]- JORAM,Java开放源代码项目
- RabbitMQ,一种开源消息队列服务软件,主要支持高级消息队列 0-9-1 版本,可以通过插件支持1.0版本协议
类似标准
[编辑]- 流文本定向消息协议(STOMP),由Codehaus开发,基于文本的消息的传输协议,使用类似JMS的`目的地`语义
- 可扩展消息与存在协议(XMPP),一种基于XML的开放式即时通信协议
- 消息队列遥测传输(MQTT),一种轻量级订阅-发布协议
参考文献
[编辑]- ^ O'Hara, J. Toward a commodity enterprise middleware (PDF). ACM Queue. 2007, 5 (4): 48–55. doi:10.1145/1255421.1255424.
- ^ Information technology -- Advanced Message Queuing Protocol (AMQP) v1.0 specification. ISO/IEC 19464. ISO. [1 May 2014]. (原始内容存档于2016-07-21).