什麼是 Azure 服務匯流排?

Microsoft Azure 服務匯流排是完全受控的企業訊息代理程式,具有訊息佇列和發佈/訂閱主題。 服務匯流排可用來將應用程式和服務彼此分離,而提供下列優點:

  • 在競爭的背景工作之間進行工作的負載平衡
  • 跨服務和應用程式界限安全地路由和傳輸資料與控制
  • 協調需要高程度可靠性的交易式工作

概觀

資料會使用「訊息」 在不同的應用程式和服務之間傳輸。 訊息是以中繼資料裝飾的容器,內含資料。 資料可以是任何種類的資訊,包括以一般格式編碼的結構化資料,例如下列格式:JSON、XML、Apache Avro、純文字。

一些常見的傳訊案例如下:

  • 傳訊。 傳輸商務資料,例如銷售或採購單、日誌或庫存移動。

  • 將應用程式分離。 改善應用程式和服務的可靠性和延展性。 產生者和取用者不需要同時上線或可供使用。 負載會進行調節,而使流量尖峰不會導致服務的負擔過度。

  • 負載平衡。 讓多個競爭取用者能夠同時讀取佇列,且各自都能安全地取得特定訊息的專屬所有權。

  • 主題和訂用帳戶。 在 發行者與訂閱者之間啟用 1:n 關聯性,讓訂閱者能夠從已發佈的訊息資料流中選取特定訊息。

  • Transactions。 可讓您執行數項作業,且全都在不可部分完成的交易範圍內。 例如,下列作業可在一個交易的範圍內完成。

    1. 從一個佇列取得訊息。
    2. 將處理的結果張貼至一或多個不同的佇列。
    3. 移動原始佇列的輸入訊息。

    只有在成功時,下游取用者才會看到結果,包括成功處置輸入訊息,允許僅限一次的處理語意。 此交易模型可供較大解決方案內容中的補償交易模式作為健全的基礎。

  • 訊息工作階段。 針對需要嚴格訊息排序或訊息延遲的工作流程和多工傳輸,實作大規模的協調。

如果您熟悉其他訊息代理程式 (例如 Apache ActiveMQ),您對服務匯流排的概念就不會感到陌生。 服務匯流排是一個平台即服務 (PaaS) 供應項目,主要的差異在於,您無須費心處理下列動作。 Azure 會為您代勞。

  • 擔心硬體失敗
  • 持續修補作業系統或產品
  • 放置記錄和管理磁碟空間
  • 處理備份
  • 容錯移轉至保留機器

符合標準和通訊協定

服務匯流排的主要線路通訊協定是進階訊息佇列通訊協定 (AMQP) 1.0,這是開放的 ISO/IEC 標準。 此通訊協定可讓客戶撰寫適用於服務匯流排和內部部署代理程式 (例如 ActiveMQ 或 RabbitMQ) 的應用程式。 AMQP 通訊協定指南提供了您想要建置這類抽象概念時所需的詳細資訊。

服務匯流排進階版完全符合 Java/Jakarta EE Java 訊息服務 (JMS) 2.0 API 的規範。 此外,服務匯流排標準版支援著重於佇列的 JMS 1.1 子集。 JMS 是訊息代理程式的一般抽象概念,可與許多應用程式和架構整合,包括廣受使用的 Spring 架構。 若要從其他訊息代理程式切換至 Azure 服務匯流排,您只需重新建立佇列和主題的拓撲,並變更用戶端提供者相依性和設定即可。 如需範例,請參閱 ActiveMQ 移轉指南

概念和術語

本節將討論服務匯流排的概念和術語。

佇列

「佇列」 會收發訊息。 在接收端應用程式能夠接收並處理訊息之前,佇列會儲存訊息。

佇列

佇列中的訊息會進行排序並加上抵達時間戳記。 經訊息代理程式接受後,訊息就會在三重備援儲存體中持續保留,且若命名空間已啟用區域,訊息將會分散於多個可用性區域。 在訊息報告至用戶端並獲得接受後,服務匯流排絕不會將訊息保留在記憶體或變動性儲存體中。

訊息會採用「提取」 模式來傳遞,而僅在收到要求時傳遞訊息。 不同於某些其他雲端佇列的忙碌輪詢模型,提取作業可能會長期存留,且在訊息可用時才會完成。

主題

您也可以使用「主題」 來收送訊息。 佇列通常用於點對點通訊,主題則適用於發佈/訂閱案例。

主題

主題可以有多個獨立的訂用帳戶,這些訂用帳戶會連結至主題,而其他方面的運作方式則與接收者端的佇列完全相同。 主題的訂閱者會收到該主題所接收每則訊息的複本。 訂用帳戶是具名實體。 訂用帳戶預設為持久性,但可以設定為會到期繼而自動刪除。 透過 JMS API,服務匯流排進階版也可讓您建立存在於連線期間的變動性訂用帳戶。

您可以定義訂用帳戶的規則。 訂用帳戶規則具有 篩選器,用以定義要複製到訂用帳戶中的訊息,並且有可修改訊息中繼資料的選擇性 動作。 如需詳細資訊,請參閱主題篩選和動作。 此功能在下列案例中很有幫助:

  • 您不想讓訂用帳戶接收所有傳送至主題的訊息。
  • 您想要在訊息通過訂用帳戶時以額外的中繼資料標記訊息。

命名空間

命名空間是所有訊息元件的容器, (佇列和主題) 。 多個佇列和主題可以位於單一命名空間中,且命名空間通常會作為應用程式容器。

您可以使用其他訊息代理程式的術語將命名空間與伺服器進行比較,但是這些概念不是直接對等的。 服務匯流排命名空間是您在大型叢集中擁有的容量配量,由數十個全數作用中的虛擬機器組成。 命名空間可以選擇性地跨越三個 Azure 可用性區域。 因此,您能夠獲得大規模執行訊息代理程式的所有可用性和健全性優勢。 而且,您無須擔心基礎複雜性。 服務匯流排是無伺服器訊息。

進階概念

服務匯流排包含可讓您解決更複雜的訊息問題的 advanced 功能,例如訊息會話、排程傳遞和交易。 如需詳細資訊,請參閱Azure 服務匯流排的 Advanced 功能

用戶端程式庫

完整支援的服務匯流排用戶端程式庫可透過 Azure SDK 來使用。

Azure 服務匯流排的主要通訊協定是 AMQP 1.0,可從任何 AMQP 1.0 相容的通訊協定用戶端使用。 數個開放原始碼 AMQP 用戶端有範例可明確示範服務匯流排互通性。 請參閱AMQP 1.0 通訊協定指南,以瞭解如何直接搭配 AMQP 1.0 用戶端使用服務匯流排功能。

Language 程式庫
Java Apache Qpid Proton-J
C/C++ Azure UAMQP CApache Qpid Proton-C
Python 適用于 python 的 Azure uAMQPApache Qpid Proton python
PHP 適用于 PHP 的 Azure uAMQP
Ruby Apache Qpid Proton Ruby
Go Azure GO AMQPApache Qpid Proton Go
C #/F #/VB AMQP .Net LiteApache NMS AMQP
JavaScript/節點 瑞亞

整合

服務匯流排可與許多 Microsoft 和 Azure 服務完全整合,例如:

後續步驟

若要開始使用服務匯流排傳訊,請參閱下列文章: