Azure 服務匯流排是完全受控的企業訊息代理程式,具有訊息佇列和發佈-訂閱主題。 服務匯流排可用來將應用程式和服務彼此分離,而提供下列優點:
- 在相互競爭的工人之間進行負載平衡
- 安全地跨服務和應用程式邊界路由和傳輸資料和控制
- 協調需要高度可靠的事務性工作
概觀
此服務會使用「訊息」,在不同的應用程式和服務之間傳輸資料。 訊息是以中繼資料裝飾的容器,其中包含資料。 資料可為任何種類的資訊,包含下列常見格式編碼的結構化資料:JSON、XML、Apache Avro 和純文字。
某些常見的傳訊案例如下:
傳訊。 傳輸業務資料,例如銷售額、採購訂單、記錄或庫存進出狀況。
分離應用程式。 改善應用程式和服務的可靠性和可擴縮性。 生產者與取用者不必同時在線上或隨時可用。 負載會加以平衡,這樣流量峰值就不會使服務負擔過重。
負載平衡。 讓多個競爭取用者能夠同時讀取佇列,且各自都能安全地取得特定訊息的專屬所有權。
主題和訂用帳戶。 在發行者與訂閱者之間啟用 1:n 關聯性,讓訂閱者能夠從已發佈的訊息資料流中選取訊息。
交易。 可讓您執行數項作業,且全都在不可部分完成的交易範圍內。 例如,下列作業可在一個交易的範圍內完成。
- 從一個佇列取得訊息。
- 將處理結果發佈到一個或多個不同的佇列。
- 將輸入訊息從原始佇列中移出。
只有成功 (包括成功處理輸入訊息) 後,下游消費者才能看到結果,實現一次性處理語意。 此事務模型是更廣泛解決方案情境中補償事務模式的強大基礎。
訊息工作階段:。 針對需要嚴格訊息排序或訊息延遲的工作流程和多工傳輸,實作大規模的協調。
如果您熟悉 Apache ActiveMQ 等其他訊息代理,那麼服務匯流排的概念與您所知的類似。 由於服務匯流排是平台即服務 (PaaS) 產品,因此一個關鍵區別在於您無需擔心以下操作。 Azure 會幫您處理這些瑣事。
- 擔心硬體故障
- 保持作業系統或產品修補程式更新
- 放置記錄和管理磁碟空間
- 處理備份
- 切換到保留機器
概念
本節討論服務匯流排的基本概念。
佇列
訊息會傳送至佇列以及從中接收。 佇列會儲存訊息,直到接收應用程式可以用來接收並處理這些訊息為止。
佇列中的訊息會排序並在送達時加上時間戳記。 一旦代理接受訊息,該訊息將始終持久保存在三重備援儲存中,如果命名空間啟用了區域功能,則該訊息將分佈在不同的可用區中。 服務匯流排會將訊息保存在記憶體或揮發性記憶體中,直到用戶端報告訊息已被接受。
訊息是以提取模式傳遞,只在要求時才會傳遞訊息。 不同於某些其他雲端佇列的忙碌提取模式,提取作業可以長時間存在,而且只在訊息可用後才會完成。
附註
有關服務匯流排佇列與儲存佇列的比較,請參閱儲存體佇列和服務匯流排佇列 - 比較和對比。
主題
您也可以使用主題來傳送和接收訊息。 雖然佇列經常用於點對點通訊,但主題有助於發佈-訂閱案例。
主題可以具有多個獨立的訂用帳戶,其會附加至主題,而且運作方式與來自接收者端的佇列完全一樣。 主題的訂閱者可以接收已傳送至該主題的每則訊息複本。 訂用帳戶是具名實體。 訂用帳戶預設為永久保存,但可以設定為到期後自動刪除。 透過 Java 訊息服務 (JMS) API,服務匯流排進階版還允許您建立僅在連線期間存在的揮發性訂閱。
您可以為訂閱定義規則。+ 訂用帳戶規則具有篩選器,用以定義要複製到訂用帳戶中的訊息,並且有可修改訊息中繼資料的選擇性動作。 如需詳細資訊,請參閱主題篩選和動作。 此功能在以下場景中非常有用:
- 您不需要訂閱才能接收發送到某個主題的所有訊息。
- 您希望在郵件通過訂閱時,使用額外的中繼資料標記郵件。
附註
如需服務匯流排佇列和主題的詳細資訊,請參閱服務匯流排佇列、主題和訂用帳戶。
命名空間
命名空間是所有訊息元件 (佇列和主題) 的容器。 命名空間可以包含一個或多個佇列和主題,它通常用作應用程式容器。
在其他訊息代理程式的術語中,命名空間可以比作是伺服器,但概念並不直接等同。 配量服務匯流排命名空間是您自己的大型叢集容量切片,而此大型叢集是由數十個全作用中虛擬機器所組成。 命名空間可以選擇性地跨越三個 Azure 可用性區域。 因此,您可以獲得大規模運行訊息 Agent 所帶來的所有可用性和穩健性優勢。 而且,您無需擔心背後的複雜性。 服務匯流排是一種無伺服器訊息傳遞方式。
進階功能
服務匯流排也包含多項進階功能,可供您解決較為複雜的傳訊問題。 以下各節將介紹這些主要特點:
訊息工作階段
為了在服務匯流排佇列或訂閱中處理訊息時實現先進先出 (FIFO) 保證,請使用會話。 工作階段也可以用於實現請求-回應模式。 要求-回應模式可讓傳送者應用程式傳送要求,並提供一種方法讓接收者將回應正確地傳回給傳送者應用程式。 如需詳細資訊,請參閱訊息工作階段。
自動轉送
自動轉送功能可讓您將一個佇列或訂閱連結到同一命名空間內的另一個佇列或主題。 啟用自動轉送後,服務匯流排會自動刪除放置在第一個佇列或訂閱 (來源) 中的訊息,並將它們放入第二個佇列或主題 (目標) 中。 如需詳細資訊,請參閱將服務匯流排實體連結起來並自動轉送
無效信件處理
服務匯流排佇列和主題訂閱提供次要的子佇列,稱為「無效信件佇列」(DLQ)。 無效信件佇列保存無法傳遞給任何接收者的訊息,或是無法處理的訊息。 然後您可以從 DLQ 中刪除郵件並進行檢查。 應用程式可以在運算子的幫助下糾正問題並重新提交訊息,記錄錯誤情況,並採取糾正措施。 如需詳細資訊,請參閱服務匯流排寄不出的信件佇列的概觀。
排定的傳遞
您可以將訊息提交至佇列或主題,以進行延遲處理。 例如,安排某個作業在特定時間可供系統處理。 如需詳細資訊,請參閱排程訊息。
訊息延遲
當佇列或訂用帳戶用戶端收到一條它願意處理的訊息,但由於應用程式內的特殊情況,目前無法處理該訊息時,該實體可以將訊息的檢索推遲到以後。 訊息仍位於佇列或訂用帳戶,但會先擱置。 如需其他資訊,請參閱訊息延遲。
交易
交易會將兩個或多個作業歸為一個執行範圍。 服務匯流排支援交易範圍內的單一傳訊實體 (佇列、主題、訂閱) 進行作業分組。 如需詳細資訊,請參閱服務匯流排交易處理概觀。
篩選和動作
訂閱者可定義希望接收的主題訊息。 這些訊息的指定形式為一或多個命名訂閱規則。 每條規則都包含一個篩選條件,用於選擇特定的訊息,並且可以選擇性地包含一個操作,用於對選定的訊息進行註釋。 對於每個匹配規則條件,訂閱都會產生訊息的副本,該副本可以針對每個匹配規則進行不同的註釋。 如需詳細資訊,請參閱主題篩選和動作。
空閒時自動刪除
閒置時自動刪除可讓您指定佇列自動刪除前的閒置間隔。 當佇列中有流量時,間隔將被重置。 最短持續時間為 5 分鐘。
重複資料偵測
如果發生錯誤導致客戶端對發送操作的結果有任何疑問,重複檢測功能可以透過允許發送方重新發送相同訊息來消除這些疑問,則佇列或主題會丟棄任何重複的副本。 如需詳細資訊,請參閱重複偵測。
訊息批次刪除
Azure 服務匯流排支援分批次刪除訊息。 這在佇列或訂閱中的訊息過期或不再相關,需要清理時具有重要價值。 如需詳細資訊,請參閱批次刪除。
安全性
服務匯流排支援安全協議,例如共用存取簽章 (SAS)、基於角色的存取控制 (RBAC) 和 Azure 資源的託管識別碼。
服務匯流排支援標準進階訊息佇列通訊協定 (AMQP) 1.0 和 HTTP/REST 通訊協定。
Geo-Replication
當 Azure 區域或資料中心發生停機時, 地理複製 使資料處理能在不同區域繼續運作。
附註
有關這些功能的更多資訊,請參閱 Azure 服務匯流排的高級功能。
符合標準和通訊協定
服務匯流排的主要線路通訊協定為進階訊息佇列通訊協定 (AMQP) 1.0,這是開放的 ISO/IEC 標準。 允許客戶針對服務匯流排和內部部署的訊息代理程式 (如 ActiveMQ 或 RabbitMQ) 撰寫應用程式。 若要建立這類抽象概念,AMQP 通訊協定指南可提供詳細資訊。
服務匯流排進階版完全符合 JAVA/Jakarta EE JAVA 訊息服務 (JMS) 2.0 API 的規範。 且 Service Bus Standard 支援專注於佇列的 JMS 1.1 子集。 JMS 是訊息代理的通用抽象,可與許多應用程式和框架集成,包括流行的 Spring 框架。 若要從其他代理程式切換到 Azure 服務匯流排,只需重新建立佇列和主題的拓撲結構,並變更客戶端提供者相依性和設定。 如需範例,請參閱 ActiveMQ 移轉指南。
用戶端程式庫
您可透過 Azure SDK 取得完整支援的服務匯流排用戶端程式庫。
- +Azure 服務匯流排 (適用於 .NET)
- 提供較高層級抽象 (建置在 SDK 之上) 的第三方架構包括 NServiceBus 和 MassTransit。
- Azure 服務匯流排程式庫 (適用於 Java)
- Azure 服務匯流排提供者 (適用於 Java JMS 2.0)
- Azure 服務匯流排模組 (適用於 JavaScript 和 TypeScript)
- Azure 服務匯流排程式庫 (適用於 Python)
Azure 服務匯流排的主要通訊協定是 AMQP 1.0,可從任何 AMQP 1.0 相容的通訊協定用戶端使用。 數個開放原始碼 AMQP 用戶端有範例可明確示範服務匯流排互通性。 請參閱 AMQP 1.0 通訊協定指南,以了解如何將服務匯流排的功能直接用於 AMQP 1.0 用戶端。
| 語言 | 程式庫 |
|---|---|
| JAVA | Apache Qpid Proton-J |
| C/C++ | Azure uAMQP C, Apache Qpid Proton-C |
| Python | 適用於 Python 的 Azure uAMQP、 Apache Qpid Proton Python) |
| PHP | 適用於 PHP 的Azure uAMQP |
| Ruby | Apache Qpid Proton Ruby |
| Go | Azure Go AMQP、Apache Qpid Proton Go |
| C#/F#/VB | AMQP .NET Lite, Apache NMS AMQP |
| JavaScript/Node | Rhea |
整合
服務匯流排可與許多 Microsoft 和 Azure 服務完全整合,例如:
後續步驟
若要開始使用服務匯流排傳訊,請參閱下列文章: