rabbitMQ學習筆記(1):基本介紹與核心概念

1、歷史

RabbitMQ是一個由erlang開發的AMQP(Advanced Message Queue )的開源實現。AMQP 的出現其實也是應了廣大人民羣衆的需求,雖然在同步消息通訊的世界裏有很多公開標準(如 COBAR的 IIOP ,或者是 SOAP 等),但是在異步消息處理中卻不是這樣,只有大企業有一些商業實現(如微軟的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等聯合制定了 AMQP 的公開標準。
    RabbitMQ是由RabbitMQ Technologies Ltd開發並且提供商業支持的。該公司在2010年4月被SpringSource(VMWare的一個部門)收購。在2013年5月被併入Pivotal。其實VMWare,Pivotal和EMC本質上是一家的。不同的是VMWare是獨立上市子公司,而Pivotal是整合了EMC的某些資源,現在並沒有上市。
    RabbitMQ的官網是http://www.rabbitmq.com

2、rabbitMQ使用場景

對於大型系統而言,模塊間通信和傳統的IPC有很大的區別,傳統的IPC都是建立在單一系統上,模塊間耦合度高,擴展性較差;如果使用socket確實可以將不同的模塊部署在不同的系統上,但是也會造成如下問題:
1)連接的維持,如果一方連接失效,傳輸的數據以何種方式丟失?
2)如何降低發送者和接受者的耦合度?
3)LOAD BALANCE?如何降低接受者的負載?
4)如何有效的將數據發送給接受者?也就是說接受者subscribe不同的數據,如何做有效地routine?
5)如何保證數據的完整和正確?
AMQP協議解決了這些問題,rabbitMQ實現了AMQP協議。

3、系統架構及其核心概念


                
RabbitMQ Server:core component of RabbitMQ,也叫做broker server,維護一條從producer和consumer的路線。
Client A & B :數據的發送方,也就是producer。
clients 1 2 3:數據的接收方,也就是consumer。
message:在producer和consumer之間傳輸的body,一個Message有兩個部分:payload(有效載荷)和label(標籤)。payload顧名思義就是傳輸的數據。label是exchange的名字或者說是一個tag,它描述了payload,而且RabbitMQ也是通過這個label來決定把這個Message發給哪個Consumer。AMQP僅僅描述了label,而RabbitMQ決定了如何使用這個label的規則。
exchange:where producers publish their message.
queue:where the message end up and are received by consumers
bindings:how the message get routed from the exchange to a particular queue.(可以理解爲路由策略?)
Connection:一個TCP連接,producer和consumer都是通過TCP連接到rabbitMQ server,程序的起點也是從這個connection開始。
Channel:虛擬連接。它建立在上述的TCP連接中。數據流動都是在Channel中進行的。也就是說,一般情況是程序起始建立TCP連接,第二步就是建立這個Channel。
爲什麼建立channel而不直接使用TCP連接?
對於OS來說,建立和關閉TCP連接是有代價的,頻繁的建立關閉TCP連接對於系統的性能有很大的影響,而且TCP的連接數也有限制,這也限制了系統處理高併發的能力。但是,在TCP連接中建立Channel是沒有上述代價的。對於Producer或者Consumer來說,可以併發的使用多個Channel進行Publish或者Receive。有實驗表明,1s的數據可以Publish10K的數據包。當然對於不同的硬件環境,不同的數據包大小這個數據肯定不一樣,但是我只想說明,對於普通的Consumer或者Producer來說,這已經足夠了。如果不夠用,你考慮的應該是如何細化split你的設計。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章