RabbitMQ 實現效能和可伸縮性的路由拓撲
為高可擴充套件系統設計一個好的路由拓撲結構就像繪製一個圖表。許多事情需要考慮,例如問題、環境的約束、訊息傳遞實現的約束以及效能策略。我們經常遇到的問題是路由在滿足我們的需求方面缺乏靈活性和表現力。RabbitMQ 在這方面脫穎而出。
基本概念
任何熟悉一般訊息傳遞的人都知道將訊息從 A 路由到 B 的概念。路由可以很簡單也可以很複雜,並且在為可擴充套件的複雜系統設計路由拓撲結構時,它必須是優雅的。保持清潔和解耦,元件可以在不同的負載下很好地節流。這可以表示為一個簡單的地圖或複雜的圖表。在其最簡單的形式中,路由拓撲可以表示為節點,例如分層節點對於 RabbitMQ 或 AMQP 的新手(請注意,Rabbit 可與多種協議一起使用,包括 STOMP、HTTP、HTTPS、XMPP 和 SMTP),以下是一些基本元件描述- 交換機 (Exchange) 伺服器中的實體,它接收來自生產者應用程式的訊息,並可選擇將這些訊息路由到伺服器中的訊息佇列
- 交換機型別 (Exchange type) 特定交換機模型的演算法和實現。與“交換機例項”不同,交換機例項是伺服器中接收和路由訊息的實體
- 訊息佇列 (Message queue) 一個命名的實體,用於儲存訊息並將訊息轉發給消費者應用程式
- 繫結 (Binding) 一個在訊息佇列和交換機之間建立關係的實體
- 路由鍵 (Routing key) 交換機可能用來決定如何路由特定訊息的虛擬地址
api.agents.agent-{id}.operations.{operationName}
在更復雜的情況下,路由鍵可能與訊息頭欄位和/或其內容上的路由結合使用。交換機檢查訊息的屬性、頭欄位、正文內容,以及可能來自其他來源的資料,然後決定如何路由訊息。 從上面的路由鍵概念派生的繫結模式可能類似於 api.agents..operations.
,我們使用繫結模式 api.agents..operations.
將交換機 E1
繫結到佇列 Q1
,以便傳送到 E1
的任何訊息都路由到 Q1
…