【RabbitMQ】生產者,消費者,通道,佇列,交換器和繫結

00潤物無聲00發表於2017-03-12

  瞭解訊息通訊中的一些重點概念對於深化對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,進行訊息路由,將訊息投遞到一個或多個佇列裡。


相關文章