Helena Edelson

校友
博文Helena Edelson

使用 RabbitMQ 實現高效能和可擴充套件性的路由拓撲

工程 | 2011年4月1日 | ...

為一個高度可伸縮的系統設計一個良好的路由拓撲就像繪製一張圖。需要考慮許多因素,例如問題本身、環境的限制、訊息傳遞實現的限制以及效能策略。我們經常遇到的問題是,在根據我們的需求調整路由方面缺乏靈活性和表現力。這正是 RabbitMQ 的優勢所在。

基本概念

任何熟悉通用訊息傳遞的人都瞭解從 A 到 B 路由訊息的概念。路由可以是簡單的,也可以是非常複雜的,當為一個可擴充套件的複雜系統設計路由拓撲時,它必須是優雅的。保持乾淨和解耦,元件可以很好地處理不同的負載。這可以表示為簡單的對映或複雜的圖。在其最簡單的形式中,路由拓撲可以表示為節點,例如分層節點

Hierarchical nodes in message routing topology

對於 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……

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有