AMQP.0-10中文版——概述

AMQP.0-10中文版——概述

第1章 概述php

1.1.  本文檔的目標

這份文檔定義了高級消息隊列協議,這個協議使得聽從該協議的客戶端應用和消息中間件服務器之間可以互相通訊。爲了徹底實現互操做性,咱們還定義了消息中間件服務的標準行爲。編程

咱們面對這個領域有經驗的技術讀者,同時還提供了足夠的規範和指南,一個合適的技術工程師能夠根據這些文檔在任何硬件平臺上用各類編程語言來構建聽從該協議的解決方案。安全

1.2.  專利

AMQP的設計目標之一是它的概念都來自於現有的、無產權阻礙的、普遍推行的標準——好比由互聯網工程任務組和萬維網頒佈的標準。服務器

所以,咱們相信僅用衆所周知的一些技術就可以實現AMQP服務,好比現有的開源網絡程序和電子郵件路由軟件或者那些技術專家們所熟悉的技術。網絡

1.3.  摘要

1.3.1.  什麼是AMQP

高級消息隊列協議使得聽從該規範的客戶端應用和消息中間件服務器的全功能互操做成爲可能。框架

1.3.2.  爲何要用AMQP

咱們的目標是實現一種在全行業普遍使用的標準消息中間件技術,以便下降企業和系統集成的開銷,而且向大衆提供工業級的集成服務。異步

咱們的宗旨是經過AMQP,讓消息中間件的能力最終被網絡自己所具備,而且經過消息中間件的普遍使用發展出一系列有用的應用程序。編程語言

1.3.3.  AMQP的範圍

爲了徹底實現消息中間件的互操做性,須要充分定義網絡協議和消息代理服務的功能語義。分佈式

所以,AMQP定義網絡協議(AMQP是協議!)和代理服務以下:模塊化

  1. 一套肯定的消息交換功能,也就是「高級消息交換協議模型」。AMQP模型包括一套用於路由和存儲消息的功能模塊,以及一套在這些模塊之間交換消息的規則。

  2. 一個網絡線級協議(數據傳輸格式),客戶端應用能夠經過這個協議與消息代理和它實現的AMQP模型進行交互通訊。

能夠只實現AMQP協議規範中的的部分語義,可是咱們相信明確的描述這些語義有助於理解這個協議。

1.3.4.  高級消息交換協議

1.3.4.1.  AMQP模型

咱們須要明確的定義服務器的語義,由於全部服務器實現都應該保持這些語義的一致性,不然就沒法進行互操做。

所以AMQP模型描述了一套模塊化的組件以及這些組件之間進行鏈接的標準規則。

在服務器中,三個主要功能模塊鏈接成一個處理鏈完成預期的功能:

  1. 「exchange」接收發布應用程序發送的消息,並根據必定的規則將這些消息路由到「消息隊列」。

  2. 「message queue」存儲消息,直到這些消息被消費者安全處理完爲止。

  3. 「binding」定義了exchange和message queue之間的關聯,提供路由規則。

使用這個模型咱們能夠很容易的模擬出存儲轉發隊列和主題訂閱這些典型的消息中間件概念。

一個AMQP服務器相似於郵件服務器,exchage相似於消息傳輸代理(email裏的概念),message queue相似於郵箱。Binding定義了每個傳輸代理中的消息路由表,發佈者將消息發給特定的傳輸代理,而後傳輸代理將這些消息路由到郵箱中,消費者從這些郵箱中取出消息。

在之前的中間件系統的應用場景中,發佈者直接將消息發送給郵箱或者郵件列表。

區別就在於用戶能夠控制message queue與exchage的鏈接規則,這能夠作不少有趣的事情,好比定義一條規則:「將全部包含這樣這樣的消息頭的消息都複製一份再發送到消息隊列中」。

AMQP模型有如下目標:

  1. 支持金融服務領域的語義要求。

  2. 支持金融服務領域所要求的性能要求。

  3. 可以很方便的擴展新的消息路由和隊列。

  4. 經過AMQP協議(AMQP和AMQP Protocol的是總體和部分的關係),服務器應用能夠經過編程的方式來實現具體的功能語義。

  5. 簡單而靈活。

1.3.4.2.  AMQP協議

AMQP協議是一個二進制協議,擁有一些現代特色:多信道、協商式、異步、安全、跨平臺、中立、高效。

AMQP一般被劃分爲三層:


模型層定義了一套命令(按功能分類),客戶端應用能夠利用這些命令來實現它的業務功能。

會話層負責將命令從客戶端應用傳遞給服務器,再將服務器的應答傳遞給客戶端應用,會話層爲這個傳遞過程提供可靠性、同步機制和錯誤處理。

傳輸層提供幀處理、信道複用、錯誤檢測和數據表示。

實現者能夠將傳輸層替換成任意傳輸協議,只要不改變AMQP協議中與客戶端應用程序相關的功能。實現者還可使用其餘高層協議中的會話層。

AMQP模型的設計由如下幾個需求所驅動:

  1. 保證聽從AMQP規範的服務器實現之間可以進行互操做。

  2. 爲服務質量提供顯示控制。

  3. 支持全部消息中間件的功能:消息交換、文件傳輸、流傳輸、遠程進程調用等。

  4. 兼容已有的消息API規範(好比Sun公司的JMS規範)。

  5. 造成一致和明確的命名。

  6. 經過AMQP協議能夠完整的配置服務器線路(TODO:server wiring是啥意思?)。

  7. 使用命令符號能夠很容易的映射成應用級別的API。

  8. 明肯定義每個操做只作一件事情。

AMQP傳輸層的設計由如下幾個主要的需求所驅動,這些需求不分前後次序:

  1. 使用可以快速打包解包的二進制編碼來保證數據的緊湊性。

  2. 可以處理任意大小的消息。

  3. 容許零拷貝數據傳輸(好比遠程DMA)。

  4. 一個鏈接支持多個會話。

  5. 保證會話可以從網絡錯誤、服務器失效中恢復。

  6. 爲了長期存在,沒有隱含的內置限制(TODO:To be long-lived,with no significant in-built limitations)。

  7. 異步傳輸消息。

  8. 可以很容易的處理新的和變化的需求。

  9. 高版本的AMQP規範可以兼容低版本的規範。

  10. 使用強斷言模型來保證應用程序的可修復性。

  11. 保持編程語言的中立性。

  12. 適宜使用代碼生成工具生成協議處理模塊。

1.3.5.  功能範圍

咱們支持各類消息交換的體系結構:

  1. 存儲轉發(多個消息發送者,單個消息接收者)。

  2. 分佈式事務(多個消息發送者,多個消息接收者)。

  3. 發佈訂閱(多個消息發送者,多個消息接收者)。

  4. 基於內容的路由(多個消息發送者,多個消息接收者)。

  5. 文件傳輸隊列(多個消息發送者,多個消息接收者)。

  6. 點對點鏈接(單個消息發送者,單個消息接收者)。

1.4.  本文檔的結構

本文檔分紅兩個部分:

  1. 「概念」部分將對AMQP的概念作一個簡單的介紹,描述AMQP怎麼工做,以及AMQP的用途。

  2. 「標準」部分將對AMQP的模型層、會話層的每一個組成部分作精確的定義,還將定義AMQP在網絡上傳輸的二進制消息結構。

  3. 咱們用IETF RFC2119中的術語定義:必須、沒必要、應該、不該該和能夠(詳見http://www.ietf.org/rfc/rfc2119.txt)。

  4. 當咱們討論聽從AMQP規範的服務器的具體行爲時,咱們使用術語「服務器」來表示這些服務器。

  5. 當咱們討論聽從AMQP規範的客戶端應用的具體行爲時,咱們使用術語「客戶端」來表示這些客戶端應用。

  6. 咱們使用「端點」來表示「服務器或者客戶端」。

  7. 除非另有說明,全部數字都是十進制的。

  8. 協議中的常量都用大寫字母的名字來表示。AMQP的實現若是須要在代碼或者文檔中定義和使用這些常量,必須用這些名字來表示。

  9. 屬性名、命令或者控制參數,以及幀字段都用小寫字母的名字來表示。AMQP的實現必須在代碼或者文檔中與之保持一致。

1.5.  約定

1.5.1.  定義

1.5.2.  版本號

AMQP版本用兩個版本號表示——主版本號和次版本號。咱們約定版本由主版本號後面加小數點再加上次版本號組成(好比1-3表示主版本號爲1,次版本號爲3)。

  1. 主版本號和次版本號能夠用0到255以內的全部值。

  2. 主版本號保持不變,次版本號遞增。當AMQP工做組提高主版本號時,次版本號將被設置爲0。所以,有可能出現這樣的版本序列:1-2,1-3,1-4,2-0,2-1……

  3. 一旦本協議發佈以後(主版本號大於1),應儘可能防止次版本號遞增到9。不過在發佈以前(版本0-x),因爲會對本協議進行頻繁的修訂,能夠不遵照這條約定。

  4. 一旦本協議發佈以後(主版本號大於1),同一個主版本不一樣次版本的實現必須向後兼容。而在發佈以前,這些次版本的實現不須要兼容。

  5. 大於或者等於99的主版本號用於測試和開發目的。

1.5.3.  技術術語

  1. AMQP模型(AMQP Model):一個由關鍵實體和語義表示的邏輯框架,聽從AMQP規範的服務器必須提供這些實體和語義。爲了實現本規範中定義的語義,客戶端能夠發送命令來控制AMQP服務器。

  2. 鏈接(Connection):一個網絡鏈接,好比TCP/IP套接字鏈接。

  3. 會話(Session):端點之間的命名對話。在一個會話上下文中,保證「剛好傳遞一次」。

  4. 信道(Channel):多路複用鏈接中的一條獨立的雙向數據流通道。爲會話提供物理傳輸介質。

  5. 客戶端(Client):AMQP鏈接或者會話的發起者。AMQP是非對稱的,客戶端生產和消費消息,服務器存儲和路由這些消息。

  6. 服務器(Server):接受客戶端鏈接,實現AMQP消息隊列和路由功能的進程。也稱爲「消息代理」。

  7. 端點(Peer):AMQP對話的任意一方。一個AMQP鏈接包括兩個端點(一個是客戶端,一個是服務器)。

  8. 搭檔(Partner):當描述兩個端點之間的交互過程時,使用術語「搭檔」來表示「另外一個」端點的簡記法。好比咱們定義端點A和端點B,當它們進行通訊時,端點B是端點A的搭檔,端點A是端點B的搭檔。

  9. 片斷集(Assembly):段的有序集合,造成一個邏輯工做單元。

  10. 段(Segment):幀的有序集合,造成片斷集中一個完整子單元。

  11. 幀(Frame):AMQP傳輸的一個原子單元。一個幀是一個段中的任意分片。

  12. 控制(Control):單向指令,AMQP規範假設這些指令的傳輸是不可靠的。

  13. 命令(Command):須要確認的指令,AMQP規範規定這些指令的傳輸是可靠的。

  14. 異常(Exception):在執行一個或者多個命令時可能發生的錯誤狀態。

  15. 類(Class):一批用來描述某種特定功能的AMQP命令或者控制。

  16. 消息頭(Header):描述消息數據屬性的一種特殊段。

  17. 消息體(Body):包含應用程序數據的一種特殊段。消息體段對於服務器來講徹底不透明——服務器不能查看或者修改消息體。

  18. 消息內容(Content):包含在消息體段中的的消息數據。

  19. 交換器(Exchange):服務器中的實體,用來接收生產者發送的消息並將這些消息路由給服務器中的隊列。

  20. 交換器類型(Exchange Type):基於不一樣路由語義的交換器類。

  21. 消息隊列(Message Queue):一個命名實體,用來保存消息直到發送給消費者。

  22. 綁定器(Binding):消息隊列和交換器之間的關聯。

  23. 綁定器關鍵字(Binding Key):綁定的名稱。一些交換器類型可能使用這個名稱做爲定義綁定器路由行爲的模式。

  24. 路由關鍵字(Routing Key):一個消息頭,交換器能夠用這個消息頭決定如何路由某條消息。

  25. 持久存儲(Durable):一種服務器資源,當服務器重啓時,保存的消息數據不會丟失。

  26. 臨時存儲(Transient):一種服務器資源,當服務器重啓時,保存的消息數據會丟失。

  27. 持久化(Persistent):服務器將消息保存在可靠磁盤存儲中,當服務器重啓時,消息不會丟失。

  28. 非持久化(Non-Persistent):服務器將消息保存在內存中,當服務器重啓時,消息可能丟失。

  29. 消費者(Consumer):一個從消息隊列中請求消息的客戶端應用程序。

  30. 生產者(Producer):一個向交換器發佈消息的客戶端應用程序。

  31. 虛擬主機(Virtual Host):一批交換器、消息隊列和相關對象。虛擬主機是共享相同的身份認證和加密環境的獨立服務器域。客戶端應用程序在登陸到服務器以後,能夠選擇一個虛擬主機。

下面這些術語在AMQP規範的上下文中沒有特別的意義:

  1. 主題:一般指發佈消息;AMQP規範用一種或多種交換器來實現主題。

  2. 服務:一般等同於服務器。AMQP規範使用「服務器」這個術語來兼容IETF的標準術語,而且明確了協議中每一個部分的角色(兩方也多是AMQP服務)。

  3. 消息代理:等同於服務器。AMQP規範使用術語「客戶端」和「服務器」來兼容IETF的標準術語

相關文章
相關標籤/搜索