RabbitMQ 圖解

RabbitMQ是一個消息隊列軟件,稱爲消息代理或隊列管理器。簡單地說, 這是一個可以定義隊列的軟件,應用程序可以連接到隊列並將消息傳輸到隊列中。

消息可以包括任何類型的信息。 例如,它可以具有從另一個應用程序(可能在另一個服務器上)開始的進程/任務的信息,或者它可以只是一個簡單的文本消息。隊列管理器軟件存儲消息,直到接收應用程序連接並從隊列中取出消息。然後接收應用程序以適當的方式處理消息。

 

 

RabbitMQ 例子

message broker可以充當各種服務的中間人(例如,在這個例子中爲web應用程序)。它們可以用來減少Web應用程序服務器的負載和交付時間,因爲通常需要相當多的時間來處理的任務可以委託給只執行它們的第三方。
在本文中,我們遵循Web應用程序允許用戶將信息上載到網站的場景。該網站將處理這些信息並生成PDF並將其發回給用戶。處理信息,生成PDF和發送電子郵件將在這個示例中花費幾秒鐘,這也是爲什麼使用消息隊列的原因之一。
當用戶將用戶信息輸入到Web界面時,Web應用程序會將“PDF處理”任務和所有信息放入消息中,並將消息放置到RabbitMQ中定義的隊列中。

 

消息隊列的基本體系結構很簡單,有一些客戶端應用程序稱爲producer,用於創建消息並將其交付給broker(消息隊列)。其他應用程序(稱爲consumer)連接到隊列並訂閱要處理的消息。軟件可以是producer,consumer,也可以既是producer也是consumer。 放置在隊列中的消息將被存儲直到consumer檢索它們。

 

 

何時以及爲什麼要使用RabbitMQ?

消息隊列允許Web服務器快速響應請求,而不是被迫在現場執行資源繁重的過程。如果要將消息分發給多個接受者進行消費或平衡工作人員之間的負載,則消息排隊也很有用。
當producer在隊列中排隊新消息的同時,consumer可以接收隊列消息並開始處理PDF。consumer可以與發佈者位於完全不同的服務器上,也可以位於同一臺服務器上。 該請求可以用一種編程語言創建,並以另一種編程語言來處理 - 兩個應用程序只能通過它們發送給對方的消息進行通信。因此,這兩個應用程序在發送者和接收者之間具有低耦合。

 

1、用戶向Web應用程序發送PDF創建請求。
2、Web應用程序(producer)向RabbitMQ發送消息,包括來自請求的數據,如姓名和電子郵件。
3、交換接受來自producer應用程序的消息,並將它們路由到正確的消息隊列用於創建PDF。
4、PDF處理工作者(consumer)接收任務並開始處理PDF。

 

EXCHANGES
消息不會直接發佈到隊列中,而是producer將消息發送到exchange。exchange負責將消息路由到不同的隊列。exchange接受來自procuder應用程序的消息,並藉助bindings和路由密鑰將它們路由到消息隊列。
bindings是隊列和交換機之間的鏈接。

 

RabbitMQ中的消息流

 


1、producer向exchange發佈消息,當你創建exchangge時,必須指定其類型。
2、exchange收到消息,現在負責消息的路由。exchange根據交換類型考慮不同的消息屬性,例如路由密鑰。
3、Bindings必須從交換到隊列創建。 在這種情況下,我們看到來自交換機的兩個不同隊列的兩個Bindings。 Exchange根據消息屬性將消息路由到隊列中。
4、消息保留在隊列中,直到由consumer處理。
5、Consumer處理消息。

 

EXCHANGE的類型

·Direct:直接交換基於消息路由密鑰將消息傳遞給隊列。在直接交換中,消息被路由到binding密鑰與消息的路由密鑰完全匹配的隊列。如果隊列綁定到具有綁定密鑰pdfprocess的交換機,那麼發佈到具有路由密鑰pdfprocess的交換機的消息將被路由到該隊列。
·Fanout:fanout exchange將消息路由到綁定到它的所有隊列。
·Topic: topic exchange在路由密鑰和bidding中指定的路由模式之間進行通配符匹配。
·Headers:Headers exchanges使用消息標題屬性進行路由

發佈了260 篇原創文章 · 獲贊 316 · 訪問量 94萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章