AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層标準進階消息隊列協定,是應用層協定的一個開放标準,為面向消息的中間件設計。基于此協定的用戶端與消息中間件可傳遞消息,并不受用戶端/中間件不同産品,不同開發語言等條件的限制。Erlang中的實作有 RabbitMQ等。進階消息隊列協定使得遵從該規範的用戶端應用和消息中間件伺服器的全功能互操作成為可能。AMQP進階消息隊列,說白了就是一個開源的消息中間件。它能解決不同元件、子產品、系統間消息通信。
AMQP模型(AMQP Model):一個由關鍵實體和語義表示的邏輯架構,遵從AMQP規範的伺服器必須提供這些實體和語義。為了實作本規範中定義的語義,用戶端可以發送指令來控制AMQP伺服器。
連接配接(Connection):一個網絡連接配接,比如TCP/IP套接字連接配接。
會話(Session):端點之間的命名對話。在一個會話上下文中,保證“恰好傳遞一次”。
信道(Channel):多路複用連接配接中的一條獨立的雙向資料流通道,為會話提供實體傳輸媒體。
用戶端(Client):AMQP連接配接或者會話的發起者,AMQP是非對稱的,用戶端生産和消費消息,伺服器存儲和路由這些消息。
伺服器(Server):接受用戶端連接配接,實作AMQP消息隊列和路由功能的程序,也稱為“消息代理”。
端點(Peer):AMQP對話的任意一方,一個AMQP連接配接包括兩個端點(一個是用戶端,一個是伺服器)。
消息頭(Header):描述消息資料屬性的一種特殊段。
消息體(Body):包含應用程式資料的一種特殊段,消息體段對于伺服器來說完全不透明——伺服器不能檢視或者修改消息體。
消息内容(Content):包含在消息體段中的的消息資料。
交換器(Exchange):伺服器中的實體,用來接收生産者發送的消息并将這些消息路由給伺服器中的隊列。
交換器類型(Exchange Type):基于不同路由語義的交換器類。
消息隊列(Message Queue):一個命名實體,用來儲存消息直到發送給消費者。
綁定器(Binding):消息隊列和交換器之間的關聯。
綁定器關鍵字(Binding Key):綁定的名稱,一些交換器類型可能使用這個名稱作為定義綁定器路由行為的模式。
路由關鍵字(Routing Key):一個消息頭,交換器可以用這個消息頭決定如何路由某條消息。
持久存儲(Durable):一種伺服器資源,當伺服器重新開機時,儲存的消息資料不會丢失。
臨時存儲(Transient):一種伺服器資源,當伺服器重新開機時,儲存的消息資料會丢失。
持久化(Persistent):伺服器将消息儲存在可靠磁盤存儲中,當伺服器重新開機時,消息不會丢失。
非持久化(Non-Persistent):伺服器将消息儲存在記憶體中,當伺服器重新開機時,消息可能丢失。
消費者(Consumer):一個從消息隊列中請求消息的用戶端應用程式。
生産者(Producer):一個向交換器釋出消息的用戶端應用程式。
虛拟主機(Virtual Host)(broker):一批交換器、消息隊列和相關對象。虛拟主機是共享相同的身份認證和加密環境的獨立伺服器域,用戶端應用程式在登入到伺服器之後,可以選擇一個虛拟主機。
消息協商器(Message Broker),它在TCP/IP等端口監聽AMQ消息。
在RabbitMQ中,使用者角色可分為五類,超級管理者, 監控者, 政策制定者, 普通管理者以及其他。
超級管理者(administrator):可登陸管理控制台(啟用management plugin的情況下),可檢視所有的資訊,并且可以對使用者,政策(policy)進行操作。
監控者(monitoring):可登陸管理控制台(啟用management plugin的情況下),同時可以檢視rabbitmq節點的相關資訊(程序數,記憶體使用情況,磁盤使用情況等)
政策制定者(policymaker):可登陸管理控制台(啟用management plugin的情況下), 同時可以對policy進行管理。但無法檢視節點的相關資訊。
普通管理者(management):僅可登陸管理控制台(啟用management plugin的情況下),無法看到節點資訊,也無法對政策進行管理。
其他:無法登陸管理控制台,通常就是普通的生産者和消費者。
使用者權限指的是使用者對exchange,queue的操作權限,包括配置權限,讀寫權限。配置權限會影響到exchange,queue的聲明和删除;讀寫權限影響到從queue裡取消息,向exchange發送消息以及queue和exchange的綁定(bind)操作。
例如:将queue綁定到某exchange上,需要具有queue的可寫權限,以及exchange的可讀權限;向exchange發送消息需要具有exchange的可寫權限;從queue裡取資料需要具有queue的可讀權限。