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