1. 程式人生 > >rabbitmq系列-基本概念理解

rabbitmq系列-基本概念理解

消息中間件 proto 連接數 接收 chang protoc 匹配 分享 img

1.簡介

RabbitMQ是一個由erlang開發的AMQP(Advanced Message Queue protocol)的開源實現。AMQP高級消息隊列,說白了就是一個開源的消息中間件。它能解決不同組件、模塊、系統間消息通信。

2.系統架構

RabbitMQ Server: 也叫broker server,存儲消息的地方

Producer:數據的發送方

Consumer:數據的接收方

Connection: 就是一個TCP的連接。Producer和Consumer都是通過TCP連接到RabbitMQ Server的。以後我們可以看到,程序的起始處就是建立這個TCP連接。

Channels

: 虛擬連接。它建立在上述的TCP連接中。數據流動都是在Channel中進行的。也就是說,一般情況是程序起始建立TCP連接,第二步就是建立這個Channel。

那麽,為什麽使用Channel,而不是直接使用TCP連接?

對於OS來說,建立和關閉TCP連接是有代價的,頻繁的建立關閉TCP連接對於系統的性能有很大的影響,而且TCP的連接數也有限制,這也限制了系統處理高並發的能力。但是,在TCP連接中建立Channel是沒有上述代價的。對於Producer或者Consumer來說,可以並發的使用多個Channel進行Publish或者Receive。

3、圖解

技術分享

  1. 信息生產者將消息(message)發送到exchange

  2. exchange接受消息之後,負責將其路由到具體的隊列中

  3. Bindings負責連接exchange和隊列(queue)

  4. 消息到達隊列(queue),然後等待被消息接收端處理

  5. 消息接收端處理消息

Exchanges有三種類型:direct, fanout,topic。 每個實現了不同的路由算法(routing algorithm)。

Direct exchange: 如果 routing key 匹配, 那麽Message就會被傳遞到相應的queue中。其實在queue創建時,它會自動的以queue的名字作為routing key來綁定那個exchange。

Fanout exchange: 會向響應的queue廣播。

Topic exchange: 對key進行模式匹配,比如ab*可以傳遞到所有ab*的queue。

Consumer和Procuder都可以通過 queue.declare 創建queue。如果queue已經存在,也不會報錯。如果沒有,要麽發送不了消息,要麽取不到消息,所以還是都創建吧。

Bindings就是將通過Exchange將queue和routing keys綁定。

rabbitmq系列-基本概念理解