使用 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……
