1. 程式人生 > >AMQP協議-中文-1

AMQP協議-中文-1

最近專案中有使用訊息佇列,使用的是rabbitmq;rabbitmq實現了AMQP協議;

在rabbitmq的官網上找到一個AMQP協議(0.9.1版本)的定義文件,學習並做了翻譯(少量地方並不涉及協議本身,也就沒有翻譯);

文件的原件下載地址為:http://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf

一:概述

1.1文件的目的

該文件定義了一個網路協議:AMQP(Advanced Message Queuing Protocol);該協議確保遵守該協議的客戶端和訊息中介軟體相互通訊

1.2摘要

1.2.1為什麼是AMQP

AMQP定義了遵守該協議的客戶端和訊息中介軟體伺服器(也成為broker)之間完善的功能性的互操作; 我們的目標是:促進標準化訊息中介軟體技術的發展和廣泛使用,標準化訊息中介軟體技術有利於降低企業和系統整合的成本,有利於為廣大使用者提供工業級的整合服務; 我們的目標是:通過AMQP,訊息中介軟體的能力最終被歸結與網路本身【?】
;通過訊息中介軟體的廣泛使用促進更多應用的產生;

1.2.2AMQP的範圍

為了實現訊息中介軟體之間完全的互操作,必須明確定義網路協議和訊息中介軟體伺服器端服務的語義; AMQP定義了以下兩方面: 1:一組訊息功能:Advanced Message Queuing Protocol Model (AMQ model);AMQ modle包含一系列的路由和訊息儲存元件,以及一些連結這些元件的規則; 2:一個網路線級協議:AMQP,可以讓客戶端應用程式與伺服器會話,並與它實現了AMQ模型進行互動

1.2.3 AMQ model

我們明確地定義了伺服器的語義,因為互操作性要求,這些語義在任何給定的伺服器實現上是相同的。AMQ模型從而定義了一組模組化的元件和連線這些元件的標準規則。有三種主要型別的元件,他們被連線到伺服器的處理鏈中以實現所需的功能;
1:exchange:從訊息傳送者傳送訊息,並且根據特定的標準(通常是訊息屬性或者內容)將訊息路由到"message-queue" 2:message-queue:訊息佇列儲存訊息,直到他們被客戶端應用程式(或多個應用程式)進行安全處理。  3:bingding:定義了一個訊息佇列和一個交換機之間的關係,並提供了訊息路由條件 使用AMQ模型,我們可以模擬包含儲存轉發佇列和主題訂閱的經典的面向訊息的中介軟體概念;也可以描述基於內容的路由,負載分配和按需訊息佇列等內容; 整體上看,一個AMQP伺服器是類似於電子郵件伺服器,exchange類似於郵件傳輸代理,message-queue類似於郵箱,binding類似於傳輸代理的路由表;郵件傳送者將郵件傳送到MTA,然後將郵件路由到郵箱,消費者從郵箱取郵件。 AMQP之前的許多訊息中介軟體系統,在許多預AMQP中介軟體系統(對比郵件系統),郵件傳送者直接將訊息傳送到個人郵箱(儲存和轉發佇列的情況),或到郵件列表(主題的訂閱的)。 不同的是,當連線訊息佇列和exchange的規則是在架構控制下的(不是嵌入到程式碼中),這樣可以實現一些有趣的事情,比如定義如下一個規則:包含某些資訊頭部的訊息的副本傳送到這個訊息佇列; AMQ modle的設計主要是為了滿足一下需求: 1:支援與其他主流訊息產品語義上的可比性 2:提供與其他主流訊息產品效能上的可比性 3:允許伺服器的特定語義可以由應用程式通過協議程式設計來定義 4:靈活和可擴充套件的,而簡單的

1.2.4 The Advanced Message Queuing Protocol (AMQP)

AMQP協議是一個二進位制協議,具有現代特色:它是多渠道共享,協商,非同步,安全,便攜,中性和高效。  AMQP可有效地分成兩層:
1:功能層:定義了一組命令(一系列功能邏輯類),有應用呼叫完成特定的功能; 2:傳輸層:實現這些命令在客戶端和服務端的傳送。並在傳輸層處理通道複用,幀,內容編碼,心臟跳動,資料表示,和異常處理
AMQ模型的設計是為了滿足如下需求: 
1:保證遵守協議的實現之間的互操作性。 
2:提供明確的控制服務質量。 
3:一致而明確的命名。 
4:allow complete configuration of server wiring via the protocol
5:使用對映成應用級的API指令符號。 
6:需要明確的是,每個操作明確只做一件事情。 
AMQP傳輸層的設計是為了滿足如下需求: 
1:緊湊,採用二進位制編碼的包,並解壓迅速。 
2:為了處理任意大小的訊息,而無需顯著限制。 
3:要跨一個連線承載多個通道。 
4:為了長期有效,無顯著內建的侷限性。 
5:允許非同步管道命令。
6:可以很容易地擴充套件到處理新的和已更改的需要。 
7:為了與將來的版本向前相容。 
8:採用了強大的斷言模式。 
9:是中性相對於程式語言。 
10:以適應程式碼生成過程。

1.2.5 部署的規模

AMQP的範圍涵蓋不同層次的規模,大致如下: 
1:開發商/休閒用途:1臺伺服器,1個使用者,10個訊息佇列,每秒訊息。 
2:生產中的應用:2臺伺服器,10-100使用者,10-50訊息佇列,每秒10條訊息(36K 訊息/小時)。 
3:關鍵部門任務的應用程式:4臺伺服器,100〜500的使用者,50-100訊息佇列,100 每秒訊息(360K/小時)。 
4:關鍵區域任務的應用程式:16臺伺服器,500-2,000使用者,100-500訊息佇列和主題, 每秒1000條訊息(3.6M/小時)。 
5:全球關鍵任務應用程式:64臺伺服器,2K-10K使用者,500-1000訊息佇列和主題,每秒(36M/小時)10,000訊息。 
6:市場資料(交易):200臺伺服器,使用者5K,10K的話題,100K的訊息每秒(360M/小時)。
訊息傳輸的延遲時間是非常重要的。舉例來說,市場資料很快會變得毫無價值。AMQP具體實現可以實現本協議定義內容的基礎上,提供額外的服務或管理能力;

1.2.6功能範圍 

我們要支援各種訊息架構: 
1:儲存 - 轉發,許多生產者和一個消費者。 
2:負載均衡,許多生產者和許多消費者。 
3:釋出 - 訂閱,許多生產者和許多消費者。 
4:基於內容的路由,許多生產者和許多消費者。 
5:排隊的檔案傳輸,許多生產者和許多消費者。 
5:兩個節點之間點對點連線。 
6:市場資料分發,許多生產者,許多消費者。