本文討論 Microsoft Azure 服務匯流排的一些常見問題解集。 您也可以造訪 Azure 支援常見問題集,以取得一般的 Azure 價格和支援資訊。
關於 Azure 服務匯流排的一般問題
什麼是 Azure 服務匯流排?
Azure 服務匯流排是非同步的訊息雲端平台,可讓您在彼此分離的系統之間傳送資料。 Microsoft 以服務的形式提供此功能,這意謂著您無須裝載自己的硬體即可使用它。
什麼是服務匯流排命名空間?
命名空間提供範圍容器,可在應用程式內定址服務匯流排資源。 必須建立命名空間才能使用服務匯流排,而且這也是開始使用的第一個步驟。
什麼是 Azure 服務匯流排佇列?
服務匯流排佇列是訊息儲存所在的實體。 如果您有多個應用程式,或多個需要彼此通訊的分散式應用程式部分,佇列很有用。 佇列和配送中心的類似之處在於,兩者都會接收多個產品 (訊息),再從該處送出。
什麼是 Azure 服務匯流排主題和訂用帳戶?
主題可視覺化為佇列,而且在使用多個訂用帳戶時,主題會變成更豐富的訊息模型;基本上是一對多的通訊工具。 此發佈/訂閱模型 (或「pub/sub」) 可讓應用程式將訊息傳送至具有多個訂用帳戶的主題,以便讓多個應用程式接收該訊息。
什麼是分割的實體?
傳統的佇列或主題由單一訊息代理程式處理並儲存在一個訊息存放區中。 分割的佇列或主題會由多個訊息代理程式處理,並儲存在多個訊息存放區。 這項功能表示分割佇列或主題的整體輸送量不會再受到單一訊息代理程式或訊息存放區的效能所限制。 此外,即使訊息存放區暫時中斷也不會讓分割的佇列或主題無法使用。
使用分割實體時無法確保順序。 若分割無法使用,您仍可從其他分割傳送及接收訊息。
Azure 服務匯流排會在何處儲存資料?
Azure 服務匯流排標準層會利用 Azure SQL Database 作為其後端儲存層。 針對巴西南部和東南亞以外的所有區域,資料庫備份會裝載在不同的區域中 (通常是 Azure 配對的區域)。 針對巴西南部和東南亞區域,資料庫備份會儲存在相同的區域中,以配合這些區域的資料落地需求。
Azure 服務匯流排進階層會將中繼資料和資料儲存在所選的區域中。 為 Azure 服務匯流排進階命名空間設定異地災害復原時,即會將中繼資料複製到所選的次要區域。
我需要在防火牆上開啟哪些連接埠?
您可以使用下列通訊協定搭配 Azure 服務匯流排來傳送和接收訊息:
- 進階訊息佇列通訊協定 1.0 (AMQP)
- 使用 TLS 的超文字傳輸通訊協定 1.1 (HTTPS)
請參閱下表,了解需要開啟哪些輸出 TCP 通訊埠,以使用這些通訊協定與 Azure 服務匯流排進行通訊:
| 通訊協定 | 連接埠 | 詳細資料 |
|---|---|---|
| AMQP | 5671、5672 | 使用 TLS 的 AMQP。 請參閱 AMQP 通訊協定指南 |
| HTTPS | 443 | 此連接埠用於 HTTP/REST API 和透過 WebSocket 的 AMQP |
透過連接埠 5671 使用 AMQP 時,通常也需要使用 HTTPS 連接埠才能進行輸出通訊,因為用戶端 SDK 執行的數個管理作業,以及從 Microsoft Entra ID (若有使用) 取得權杖的作業都要透過 HTTPS 執行。
官方 Azure SDK 通常會使用 AMQP 通訊協定,從服務匯流排傳送和接收訊息。
透過 WebSocket 的 AMQP 通訊協定選項會透過連接埠 TCP 443 (和 HTTP/REST API 一樣) 來執行,但在功能上與一般 AMQP 並無不同。 此選項的初始連線延遲較高 (因為會進行額外的交握來回行程),額外負荷也會多一點 (以便能共用 HTTPS 連接埠)。 如果選取此模式,則 TCP 連接埠 443 就足供進行通訊。 下列選項可供選取 AMQP WebSocket 模式。
| 語言 | 選項 |
|---|---|
| .NET (Azure.Messaging.ServiceBus) | 使用採用 ServiceBusClientOptions 作為參數的建構函式建立 ServiceBusClient。 將 ServiceBusClientOptions.TransportType 設定為 ServiceBusTransportType.AmqpWebSockets |
| .NET (Microsoft.Azure.ServiceBus) | 建立用戶端物件時,請使用採用 TransportType、ServiceBusConnection 或 ServiceBusConnectionStringBuilder 作為參數的建構函式。 針對採用 對於採用 如果您使用 |
| Java (com.azure.messaging.servicebus) | 建立用戶端時,將 ServiceBusClientBuilder.transportType 設定為 AmqpTransportType.AMQP.AMQP_WEB_SOCKETS |
| Java (com.microsoft.azure.servicebus) | 建立用戶端時,將 transportType 中的 設定為 com.microsoft.azure.servicebus.primitives.TransportType.AMQP_WEB_SOCKETS |
| JavaScript | 建立服務匯流排用戶端物件時,請使用 webSocketOptions 中的 屬性。 |
| Python(程式語言) | 建立服務匯流排用戶端時,請將 ServiceBusClient.transport_type 設定為 TransportType.AmqpOverWebSocket |
在 2026 年 9 月 30 日,我們將淘汰不符合 Azure SDK 準則的 Azure 服務匯流排 SDK 程式庫 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure.servicebus。 我們也將結束 SBMP 通訊協定的支援,因此您將無法在 2026 年 9 月 30 日之後再使用此通訊協定。 請在該日期之前移轉至最新的 Azure SDK 程式庫,該程式庫提供重要的安全性更新和改進的功能。
雖然較舊的程式庫仍可在 2026 年 9 月 30 日之後使用,但它們將不再收到 Microsoft 的官方支援和更新。 如需詳細資訊,請參閱支援淘汰公告。
Azure 服務匯流排是否支援 Java 訊息服務 (JMS)?
是。 其支援。 請參閱以下文章:
需要將哪些 IP 位址新增至允許清單?
若要尋找連線所需的適當 IP 位址以列入允許清單,請遵循下列步驟:
從命令提示字元執行下列命令:
nslookup <YourNamespaceName>.servicebus.windows.net記下
Non-authoritative answer中傳回的 IP 位址。
如果您針對命名空間使用了區域備援,則還需要執行一些步驟:
首先,在命名空間上執行 nslookup。
nslookup <yournamespace>.servicebus.windows.net記下 [非授權回答] 區段中的名稱,其採用下列其中一種格式:
<name>-s1.cloudapp.net <name>-s2.cloudapp.net <name>-s3.cloudapp.net針對尾碼為 s1、s2 和 s3 的每個名稱執行 nslookup,以取得三個執行個體全都在三個可用性區域執行的 IP 位址。
注意
nslookup命令傳回的 IP 位址不是靜態 IP 位址。 在基礎部署遭到刪除或移至不同的叢集之前,其會維持不變,不過不建議或支援使用IP位址,而且您必須追蹤IP位址的變更。
哪裡可以找到用戶端在命名空間中傳送/接收訊息的 IP 位址?
我們不會記錄用戶端在命名空間中傳送或接收訊息的 IP 位址。 重新產生金鑰,讓所有現有的用戶端都無法驗證及檢閱 Azure 角色型存取控制 (Azure RBAC) 設定,以確保只有允許的使用者或應用程式可以存取命名空間。
最佳作法
Azure 服務匯流排的最佳做法有哪些?
請參閱使用服務匯流排的效能改進最佳作法 - 這篇文章描述如何在交換訊息時將效能最佳化。
建立實體前的須知事項為何?
佇列和主題的下列屬性是不可變的。 在建立實體時請將這個限制納入考量,因為若要修改這些屬性,就必須建立新的替代實體。
- 資料分割
- 工作階段
- 重複資料偵測
- 快速實體
定價
本節提供服務匯流排價格結構的一些常見問題解答。
服務匯流排定價與計費一文說明服務匯流排中的計費計量。 如需服務匯流排價格選項的特定資訊,請參閱服務匯流排價格詳細資料。
您也可以造訪 Azure 支援常見問題集,以取得一般 Azure 價格資訊。
服務匯流排的收費方式為何?
如需服務匯流排價格的完整資訊,請參閱 服務匯流排價格詳細資料。 除了記下的價格之外,您還需支付在布建應用程式之數據中心外輸出的相關數據傳輸費用。
何種服務匯流排用法需支付資料傳輸費用? 何種無需費用?
指定 Azure 區域內的任何資料傳輸均不收取任何費用,以及任何輸入數據傳輸。 區域外部的資料傳送需要出口流量費用,可以在這裡找到。
服務匯流排是否會收取儲存體費用?
否。 服務匯流排不會收取儲存體費用。 不過,每個佇列/主題可保存的資料量上限有配額限制。 請參閱下一個常見問題。
我有一個服務匯流排的標準命名空間。 為什麼在資源群組 `$system` 下會顯示幾筆費用?
Azure 服務匯流排最近已升級計費元件。 由於這項變更,如果您有服務匯流排標準命名空間,則可能會在資源群組 /subscriptions/<azure_subscription_id>/resourceGroups/$system/providers/Microsoft.ServiceBus/namespaces/$system 下看到資源 $system 的明細項目。
這些費用代表每個已佈建服務匯流排標準命名空間的 Azure 訂閱基本費用。
請務必注意,這些費用並不是新增的,而是原本也存在於先前的計費模型中。 唯一的變更是現在改列在 $system 下。 這是因為新計費系統中的條件約束會將訂閱層級費用歸類在 $system 資源識別碼下,而不是繫結至特定資源。
配額
如需服務匯流排限制和配額的清單,請參閱服務匯流排配額概觀。
如何處理大小超過 1 MB 的訊息?
「服務匯流排」訊息服務 (佇列和主題/訂用帳戶) 可讓應用程式傳送大小最大達 256 KB (標準層) 或 100 MB (進階層) 的訊息。 如果您要處理大小超過允許大小的訊息,請使用這篇部落格文章中所述的宣告檢查模式。
疑難排解
在從另一個訂用帳戶中刪除命名空間之後,我為何無法重新建立它?
在您從訂用帳戶刪除命名空間之後,必須先等候 4 個小時的時間,才能在另一個訂用帳戶中以相同的名稱重新建立它。 否則,您可能會收到下列錯誤訊息︰Namespace already exists。
Azure 服務匯流排 API 所產生的例外狀況有哪些,其建議的動作為何?
如需可能的服務匯流排例外狀況,請參閱例外狀況概觀。
什麼是共用存取簽章,何種語言可支援產生簽章?
共用存取簽章是以 SHA-256 安全雜湊或 URI 為基礎的驗證機制。 如需如何以 Node.js、PHP、Java、Python 和 C# 產生自有簽章的資訊,請參閱共用存取簽章一文。
訂用帳戶和命名空間管理
如何將命名空間移轉到另一個 Azure 訂用帳戶?
您可以使用 Azure 入口網站或 PowerShell 命令,將命名空間從一個 Azure 訂用帳戶移到另一個訂用帳戶。 若要執行這項作業,命名空間必須已在作用中。 執行命令的使用者必須同時是來源和目標訂用帳戶上的系統管理員。
入口網站
若要使用 Azure 入口網站將「服務匯流排」移到另一個訂用帳戶,請依照這裡的指示操作。
PowerShell
下列 PowerShell 命令序列會將命名空間從一個 Azure 訂用帳戶移到另一個訂用帳戶。 若要執行這項作業,命名空間必須已經是作用中,而且執行 PowerShell 命令的使用者必須是來源與目標訂用帳戶的系統管理員。
# Create a new resource group in target subscription
Select-AzSubscription -SubscriptionId 'ffffffff-ffff-ffff-ffff-ffffffffffff'
New-AzResourceGroup -Name 'targetRG' -Location 'East US'
# Move namespace from source subscription to target subscription
Select-AzSubscription -SubscriptionId 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
$res = Find-AzResource -ResourceNameContains mynamespace -ResourceType 'Microsoft.ServiceBus/namespaces'
Move-AzResource -DestinationResourceGroupName 'targetRG' -DestinationSubscriptionId 'ffffffff-ffff-ffff-ffff-ffffffffffff' -ResourceId $res.ResourceId
是否可以在服務匯流排命名空間上停用 TLS 1.0 或 1.1?
是,您可以藉由設定最低 TLS 版本,在服務匯流排命名空間上停用 TLS 1.0 或 1.1。 如需詳細資訊,請參閱對服務匯流排命名空間的要求強制執行最低必要版本的傳輸層安全性 (TLS)。