RabbitMQ是一個開源的消息代理軟體。它接受來自生產者的消息並將其傳遞給消費者。它就像一個中間人,可以用來減少Web應用程式伺服器的負載和交付時間。 RabbitMQ如何工作 讓我們簡要介紹一下RabbitMQ的工作原理。 讓我們首先熟悉RabbitMQ的一些重要概念: 生產者:發送消息的應用程 ...
RabbitMQ是一個開源的消息代理軟體。它接受來自生產者的消息並將其傳遞給消費者。它就像一個中間人,可以用來減少Web應用程式伺服器的負載和交付時間。
RabbitMQ如何工作
讓我們簡要介紹一下RabbitMQ的工作原理。
讓我們首先熟悉RabbitMQ的一些重要概念:
-
生產者:發送消息的應用程式。
-
消費者:接收消息的應用程式。
-
隊列:存儲消息的緩衝區。
-
消息:通過RabbitMQ從生產者發送給消費者的信息。
-
連接:連接是應用程式和RabbitMQ代理之間的TCP連接。
-
通道:通道是連接內的虛擬連接。當您從隊列中發佈或使用消息時 - 它們都是通過通道完成的。
-
Exchange:接收來自生產者的消息,並根據交換類型定義的規則將其推送到隊列。要接收消息,需要將隊列綁定到至少一個交換。
-
綁定:綁定是隊列和交換之間的鏈接。
-
路由密鑰:路由密鑰是交換機查看的密鑰,用於決定如何將消息路由到隊列。路由密鑰就像消息的地址。
生產者將消息發送/發佈給代理 - > 消費者從代理接收消息。RabbitMQ是生產者和消費者之間的通信中間件,即使它們在不同的機器上運行。
當生產者向隊列發送消息時,它不會直接發送,而是使用交換機發送。下麵的設計演示了主要的三個組件如何相互連接。
負責將消息路由到不同隊列的交換代理。這樣消息就可以從生產者接收到交換機,然後再次轉發到隊列。這被稱為“發佈”方法。
消息將從隊列中獲取並消耗; 這被稱為'消費'。
將消息發送到多個隊列
通過使用更複雜的應用程式,我們將擁有多個隊列。因此消息將在多個隊列中發送它。
向多個隊列交換髮送消息通過綁定和路由密鑰連接到隊列。綁定是您設置為將隊列連接到交換機的“鏈接”。Routing鍵是一個消息屬性。在決定如何將消息路由到隊列時(取決於交換類型),交換機可能會查看此密鑰。
消息中心
消息不會直接發佈到隊列,而是生成器將消息發送到交換機。一個交換負責的消息不同隊列的路由。一個交換接受來自生產應用程式的消息並將其路由消息隊列與綁定和路由鍵的幫助。阿結合是隊列和交換之間的鏈接。
RabbitMQ中的消息流
-
該製片人將消息發佈到交換。創建交換時,必須指定它的類型。稍後將詳細說明不同類型的交換。
-
該交換接收消息,現在負責該消息的路由。交換機將不同的消息屬性考慮在內,例如路由密鑰,具體取決於交換類型。
-
必須從交換到隊列創建綁定。在這種情況下,我們看到來自交換的兩個不同隊列的兩個綁定。Exchange根據郵件屬性將郵件路由到隊列中。
-
消息留在隊列中,直到消費者處理它們
-
消費者處理消息。
交換類型
-
直接:直接交換基於消息路由密鑰將消息傳遞到隊列。
-
扇出:扇出交換將消息路由到綁定到它的所有隊列。
-
主題:主題交換在路由密鑰和綁定中指定的路由模式之間進行通配符匹配。
-
標頭:標頭交換使用郵件標頭屬性進行路由。
RabbitMQ核心概念
在深入挖掘RabbitMQ之前,需要先介紹一些重要的概念。
-
生產者:發送消息的應用程式。
-
消費者:接收消息的應用程式。
-
隊列:存儲消息的緩衝區。
-
消息:通過RabbitMQ從生產者發送給消費者的信息。
-
連接:連接是應用程式和RabbitMQ代理之間的TCP連接。
-
通道:通道是連接內的虛擬連接。當您從隊列中發佈或使用消息時 - 它們都是通過通道完成的。
-
Exchange:接收來自生產者的消息,並根據交換類型定義的規則將其推送到隊列。要接收消息,需要將隊列綁定到至少一個交換。
-
綁定:綁定是隊列和交換之間的鏈接。
-
路由密鑰:路由密鑰是交換機查看的密鑰,用於決定如何將消息路由到隊列。路由密鑰就像消息的地址。
-
AMQP:AMQP(高級消息隊列協議)是RabbitMQ用於消息傳遞的協議。
-
用戶:可以使用給定的用戶名和密碼連接到RabbitMQ。可以為每個用戶分配許可權,例如在實例中讀取,寫入和配置許可權的許可權。