在 5 分鐘或更短時間內解釋 RabbitMQ
已發表: 2022-11-24今天我們將看到如何通過異步執行最繁重的處理來加快頁面的加載時間,所有這些都非常簡單地管理,這要歸功於 RabbitMQ。
應用程序或網站的穩定性和速度無疑是用戶最重要的因素之一。 誰在看到第一頁之前從未離開過網站,因為它花了太長時間?
什麼是 RabbitMQ

RabbitMQ 是一種開源、分佈式和可擴展的消息傳遞代理,充當生產者和消費者之間高效通信的中介。
RabbitMQ 實現了應用層消息傳遞協議 AMQP,該協議專注於通過確認從代理到生產者以及從消費者到生產者的消息接收來傳遞具有交付保證的異步消息。
RabbitHQ 是如何工作的
RabbitMQ 以一種簡化的方式定義了隊列,這些隊列將存儲生產者發送的消息,直到消費應用程序獲取消息並對其進行處理。 它允許我們設計和實現分佈式系統,其中一個系統被劃分為獨立的模塊,這些模塊通過消息相互通信。
像所有通信一樣,我們需要生產者、消息和接收者。 蛋糕中間是 RabbitMQ,這將是消息等待接收者的地方。
讓我們通過了解代表消息交換的交換類型來更好地理解它是如何工作的。
交換類型
通過交換,每當我們通過 RabbitMQ 發送消息時,我們不會直接將其發送到隊列; 為了讓其他系統讀取它,我們將它發送到一個交換器,它負責將消息轉發到不同的隊列。

交換的類型有直接、扇出、主題和讀者。
直接交換
假設生產者需要向三個消費者發出購買確認消息。 也就是說,系統需要與其他三個不同的系統進行通信才能進行購買。
由於 RabbitMQ 將消息分別發送到每個隊列,因此有動力讓這些其他系統直接接收消息。
通常情況下,exchange 會將消息轉發到隊列中,但我們往往不希望我們的消息被發送到所有的隊列中。 因此,我們可以應用幾個條件來進行交換工作。
因此,您可以只將消息發送給一個消費者; 而不是發送給所有人。
Binding Key :要將隊列連接到交換器,您需要創建一個綁定,即隊列和交換器之間的關係,就像連接器一樣。
Routing Key :在這個綁定中,我們還可以創建一個稱為路由鍵的元素,換句話說,它是將我們的消息轉發到特定隊列的鍵。
例如,如果您有一個路由鍵 X、一個路由鍵 Y 和一個路由鍵 Z,帶有路由鍵 Y 的消息將通過隊列 Y 並直接傳遞給您定義的接收消息的消費者。
這樣,我們可以有多個隊列連接到一個交換器,但同時,它們也可以使用路由鍵與交換器建立不同的關係。
扇出交換
當消息被發送到交換器時,它被發送到所有連接到它的隊列。 因此,如果您有 10 個隊列連接到一個扇出交換器,則所有隊列都將收到發送的消息。
話題交流
它是最靈活的交換之一,允許我們根據主題發送消息。 並且根據您命名路由鍵的方式,可以創建規則模式和系統之間的關係。
例如: routing key (x.*); routing key(*.z); routing key (*.y.*).
routing key (x.*); routing key(*.z); routing key (*.y.*).
RabbitMQ 中的 AQMP 是什麼
AMQP(高級消息隊列協議)是一種開放的消息傳遞協議,用於定義多個應用程序之間的消息傳輸。 它類似於 HTTP 和 TCP 協議,因為它是一種有線級協議,只是它允許異步傳輸。
RabbitMQ 選擇實現 AMQP 有幾個原因。 首先是這個協議被描述為中間件的標準,不像 JMS,它定義了一個 API。
一個國際聯盟,包括像 Red Hat、Cisco Systems 和 Microsoft 這樣的大公司,編寫了這個 AMQP 規範。 第二個是該協議的互操作性,它允許任何實現 AMQP 的應用程序與 AMQP 代理進行通信。
AMQP 不是 RabbitMQ 使用的唯一協議。 下圖代表了 RabbitMQ 實現和/或支持的所有協議、語言和 API。
RabbitMQ 的最佳特性
除了允許通過異步消息和來自不同位置的消息集成不同的應用程序之外,RabbitMQ 還為我們提供了其他功能,這些功能使其在消息代理世界中非常流行:
可靠的存儲
RabbitMQ 合併了幾個允許它保證消息傳遞的特性。 其中,它提供了當沒有消費者可以接收到消息時的存儲。 它允許消費者接受消息的傳遞以確保它已被成功處理。

如果處理失敗,RabbitMQ 允許消息重新排隊以供不同的消費者實例使用,或者由最初失敗的同一個消費者在恢復時再次處理。
RabbitMQ 還保證了消息的傳遞順序; 也就是說,它們的消費順序與它們到達 RabbitMQ 隊列的順序相同。
創建集群
儘管 RabbitMQ 通過每秒處理數千條消息來提供出色的性能,但有時它需要能夠在不影響應用程序性能的情況下處理更多的消息。
為此,RabbitMQ 允許創建集群以水平擴展解決方案,這對生產者和消費者都是透明的。
高可用隊列
在 RabbitMQ 中,隊列可以復製到集群中的多個節點,確保在節點故障或停機時,代理可以繼續接收來自生產者的消息並將它們傳遞給適當的消費者。
靈活的路由
在 RabbitMQ 中,可以定義靈活的路由規則,甚至遵循某種模式,通過綁定在交換器和隊列之間路由消息。
多協議支持
RabbitMQ 除了支持 AMQP 協議外,還通過插件支持 STOMP、MQTT 和 HTTP。 它還為每個代理的組件合併了身份驗證和訪問控制機制。
RabbitMQ 的實際用例
RabbitMQ 最重要的用例是使應用程序之間的異步性保證成為可能,減少應用程序之間的耦合,分發警報以及在後台控製作業隊列。
然而,RabbitMQ 的實際用例是在電子商務中,其中 t 用於操縱、處理並將您的銷售訂單轉發到其他部門的系統,例如分銷和開具發票。
處理訂單時,您可以將銷售消息轉發到配送中心和發票區域。 在這個方案中,一切都是水平工作的,遵循發送消息的異步模式,但通常可以將一個動作發送到多個隊列。
按照前面的示例,當客戶進行購買並且需要準備產品以進行分發、運輸和開具發票時,此功能非常有用。
由於這些扇區中的每一個都是一個不同的系統,RabbitMQ 的目標是將所有這些消息轉發到相應的系統。
兔子 MQ 替代品:
RabbitMQ 比它看起來簡單得多,並且有幾種替代方法,包括:
#1。 IronMQ
IronMQ 是超快的消息隊列軟件。 它的可用性高,設計耐用,最好是一次性交付。 IronMQ 是現代應用程序架構最強大的雲原生解決方案。

它支持推送隊列、拉取隊列和長輪詢,使輪詢請求保持更長時間。 此外,它可以使用多個高可用性數據中心,這有助於擴展性。
您可以在雲端、共享或專用硬件或本地進行部署。 它還具有一系列帶有易於閱讀文檔的客戶端庫。
#2。 阿帕奇卡夫卡
Kafka 是一個在分佈式事件流中具有強大影響力的平台。 Kafka 的核心被設計為一個可複制的、分佈式的、持久的提交日誌。

它最大的可用性是為事件驅動的微服務或大規模流處理應用程序提供動力,在集群內自動異步複製事件以實現容錯和高可用性。
#3。 阿帕奇ActiveMQ

ActiveMQ 是一個基於 Java 的多協議消息代理。 有了它,我們就可以在應用層集成使用AMQP消息隊列協議的應用。
它實現了多種集成協議,例如 JMS(本機 Java)和 Stomp(可由 PHP 應用程序使用)等。
此外,Amazon 擁有名為 Amazon MQ 的“託管”版本,這使得使用該服務變得更加容易。
最後的話
傳統上,消息代理一直是組織架構中的重要組成部分。 儘管如此,隨著通過不同渠道進入公司係統的用戶越來越多,需要能夠以低成本橫向擴展的產品。 允許每秒處理大量消息。
這就是新一代代理(如 RabbitMQ)在現代應用程序中變得越來越重要的地方,這些應用程序尋求為我們的客戶提供高水平的可用性、可靠性、互操作性和性能。
您還可以為您的應用程序探索一些可靠的 RabbitMQ 託管平台。