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