【RabbitMQ】生產者,消費者,信道,隊列,交換器和綁定

瞭解消息通信中的一些重點概念對於深化對RabbitMQ的理解有重要的意義;下面從生產者,消費者,信道,隊列,交換器和綁定,來介紹他們在消息通信過程中的角色和作用;

生產者:
  創建消息,然後發佈到代理服務器(RabbitMQ)

消費者:
連接到代理服務器(RabbitMQ)上,並訂閱到隊列上。不會知道誰是消息的生產者

整個過程:

生產者創建消息,消費者接收消息。

  消息:包括有效載荷與標籤

    有效載荷:要傳輸的數據

    標籤:描述有效載荷,並且RabbitMQ使用標籤決定誰將獲得消息的拷貝;

信道:
  生產者和消費者與代理服務器之間的通信必須建立一個信道。

爲什麼會有,作用?

  連接到RabbitMQ,才能消費或者發佈消息,信道是建立在“”真實“”TCP連接內的虛擬連接。AMQP命令都是通過信道發送出去的。

TCP連接和信道的關係

  在應用程序與代理服務器之間創建一個TCP連接,TCP一旦打開,就會創建AMQP信道

  電纜相當於TCP,信道是一條獨立光纖束,一條TCP連接上創建多少條信道是沒有限制的。

爲什麼不使用TCP連接發送AMQP命令
  1.創建和銷燬TCP會話,開銷大
  2.如果使用TCP,每個線程連接到RabbitMQ,都要創建連接,造成浪費和性能瓶頸
  3.使用一個TCP連接,能夠滿足性能,並且保證線程私密性。效果更好。

隊列:
  AMQP消息路由必須三部分:交換器,隊列,綁定

  生產者把消息發佈到交換器,消息最後到達隊列,被消費者接收,綁定決定了消息如何從路由器路由到特定的隊列。

隊列是消息通信的基礎模塊

  1.爲消息提供了處所,消息在此等待消費

  2.對負載均衡來說,隊列是絕佳方案,讓RabbitMQ循環的方式均勻分配消息。

  3.隊列是Rabbit中消息的最後終點(除非消息進入“”黑洞“”)

  

交換器和綁定
  消費者從隊列中獲取消息,但是消息是如何到達隊列的呢?

  將消息投遞到隊列時,通過把消息發送給交換器來完成。根據確定的規則,RabbitMQ會決定消息投遞到那個隊列。這個規則叫路由鍵(routing key),隊列通過路由鍵綁定到交換器。當把消息發送發送到代理服務器時,消息將擁有一個路由鍵,RabbitMQ會將其和綁定使用的路由鍵進行匹配。匹配成功,消息會投遞到隊列,不匹配則進入黑洞

  

  使用交換機和綁定完成解耦,對於發送消息給服務器的一方來說,不需要關係服務器另一端的邏輯。服務器會根據路由鍵將消息從交換器路由到隊列。

  在AMQP中定義類4種類型的交換器:direct,fanout,topic和header。header交換器與其他3個不同,它允許匹配AMQP消息的header而不是路由鍵,不常用;


消息隊列的使用過程大概如下:

  (1)客戶端連接到消息隊列服務器,打開一個channel。

  (2)客戶端聲明一個exchange,並設置相關屬性。

  (3)客戶端聲明一個queue,並設置相關屬性。

  (4)客戶端使用routing key,在exchange和queue之間建立好綁定關係。

  (5)客戶端投遞消息到exchange。

  (6)exchange接收到消息後,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列裏。
 

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