Copyright (2013) 郭龍倉. All Rights Reserved.
寫在前面
MOM與Messge Broker
MOM與Message Broker其實是挺寬泛的概念,大部分情況下可以簡單認爲兩者是同義詞。
Messge Broker是不同應用之間的消息樞紐,負責實現應用之間的通信。Messge Broker將部分或者全部非核心業務相關的消息處理邏輯從應用中解耦出來,例如消息路由、語言/平臺無關性、同步/異步等等。
另外說一句廢話,Messge Broker是 Message based,not Stream。
AMQP
AMQP的全稱是Advanced Message Queuing Protocol,翻譯過來就是高級消息隊列協議。簡單來說,AMQP是一個廠商中立、語言無關的Message Broker規範。
AMQP規範中有幾個核心的概念:
Message
Virtual Host
Exchange
Queue
Binding
Routing Key
Binding Key
Exchange Type
Publisher/Producer
Subscriber/Consumer
Connection
Channel
Virtual Host
每個Message Broker由一個或 Virtual Host構成;可以類比一下理機和虛擬機。Virtual Host相當於一個獨立的名稱空間,它有屬於自己的Exchange、Queue以及的一些相關對象。不同Virtual Host之間的Exchange可以重名。Queue只能和相同Virtual Host中的Exchange進行綁定。
Exchange
Queue
Queue即消息隊列,負責存儲Exchange轉發過來的Message。注意,是Queue,所以Message是First-In-First-Out。
Binding
Binding指的是Exchange根據規則作出消息轉發決策的過程。Message到達Exchange,Exchange此時並不知道Message應該被轉發到哪些Queue,然後Exchange根據規則對Message進行Binding決策,Binding完成之後,Exchange根據Binding的結果將Message轉發到正確的Queues。
Routing Key
每個Message一般來說必須指定一個Routing Key,Exchange根據Message的Routing Key進行Binding,然後完成Message的轉發。
Binding Key
每個Queue一般來說必須指定一個Binding Key。 Binding的過程其實就是根據一定的規則判定Message的Routing Key是否與Queue的Binding Key匹配,如果匹配,則轉發Message到Queue。如果Message的Routing Key與多個Queue的Binding Key匹配,則所有匹配的Queue都會收到該Message。
Exchange Type
Exchange Type決定了Binding的匹配規則。AMQP支持三種Exchange Type:
Direct Exchange
Topic Exchange
Fanout Exchange
如果你熟悉網絡中單播、組播、廣播的概念的話,你可以簡單理解爲:Direct Exchange就是單播,Topic Exchange就是組播,Fanout Exchange就是廣播。
Connection
Publisher/Producer與Virutal Host 或 Subscriber/Consumer與Virtual Host之間的TCP連接。
Channel
通過多路複用技術,多個Channel共享同一個Connection。Message通過Channel在Publisher/Producer、Virutal Host、Subscriber/Consumer之間傳遞。
一圖勝千言
AMQP協議堆棧
最後附上一張AMQP的協議堆棧圖,深入研究請參考官網AMQP規範。
源自:http://blog.csdn.net/anyaas/article/details/17637141?ADUIN=369885910&ADSESSION=1388314375&ADTAG=CLIENT.QQ.5275_.0&ADPUBNO=26274