高級消息隊列協議
高級消息隊列協議即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).