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