可以将以下协议与 Azure 服务总线配合使用,以便发送和接收消息:
高级消息队列协议 1.0 (AMQP)
具有 TLS 的超文本传输协议 1.1 (HTTPS)
请查看下表,了解需要打开哪些出站 TCP 端口,以便使用这些协议与 Azure 服务总线通信:
通过端口 5671 使用 AMQP 时,通常还需要使用 HTTPS 端口进行出站通信,因为客户端 SDK 执行的一些管理操作和从 Microsoft Entra ID(使用时)获取令牌的操作都是通过 HTTPS 运行的。
正式的 Azure SDK 通常使用 AMQP 协议通过服务总线发送和接收消息。
与 HTTP/REST API 一样,AMQP-over-WebSockets 协议选项通过端口 TCP 443 运行,但在功能上与普通 AMQP 相同。 由于额外的握手往返,此选项的初始连接延迟较高,并且作为共享 HTTPS 端口的折衷方案,此选项的开销略高。 如果选择此模式,TCP 端口 443 足以进行通信。 以下选项允许选择 AMQP WebSockets 模式。
.NET (Azure.Messaging.ServiceBus)
使用将
ServiceBusClientOptions
用作参数的构造函数创建
ServiceBusClient
。 将
ServiceBusClientOptions.TransportType
设置为
ServiceBusTransportType.AmqpWebSockets
.NET (Microsoft.Azure.ServiceBus)
创建客户端对象时,请使用将
TransportType
、
ServiceBusConnection
或
ServiceBusConnectionStringBuilder
用作参数的构造函数。
对于采用
transportType
作为参数的构造,请将参数设置为
TransportType.AmqpWebSockets
。
对于采用
ServiceBusConnection
作为参数的构造函数,请将
ServiceBusConnection.TransportType
设置为
TransportType.AmqpWebSockets
。
如果使用
ServiceBusConnectionStringBuilder
,则使用可让你选择指定
transportType
的构造函数。
Java (com.azure.messaging.servicebus)
创建客户端时,请将
ServiceBusClientBuilder.transportType
设置为
AmqpTransportType.AMQP.AMQP_WEB_SOCKETS
Java (com.microsoft.azure.servicebus)
创建客户端时,请将
com.microsoft.azure.servicebus.ClientSettings
中的
transportType
设置为
com.microsoft.azure.servicebus.primitives.TransportType.AMQP_WEB_SOCKETS
JavaScript
在创建服务总线客户端对象时,请使用
ServiceBusClientOptions
中的
webSocketOptions
属性。
Python
在创建服务总线客户端时,请将
ServiceBusClient.transport_type
设置为
TransportType.AmqpOverWebSocket
2026 年 9 月 30 日,我们将停用 Azure 服务总线 SDK 库 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure.servicebus,这些库不符合 Azure SDK 准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 请在该日期之前迁移到最新的 Azure SDK 库,新库提供了关键安全更新和改进功能。
尽管 2026 年 9 月 30 日之后仍然可以使用较旧的库,但它们将不再获得 Microsoft 的官方支持和更新。 有关详细信息,请参阅
支持停用公告
。
Azure 服务总线是否支持 Java 消息服务 (JMS)?
是的。 它确实存在。 请参阅以下文章:
将 JMS 2.0 API 与 Azure 服务总线高级版配合使用
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
为每一个运行 nslookup,使用后缀 s1、s2 和 s3 获取所有三个在三个可用性区域中运行的实例的 IP 地址。
nslookup
命令返回的 IP 地址不是静态 IP 地址。 在基础部署被删除或移动到其他群集之前,它保持不变,但不建议也不支持使用 IN 地址,你需要跟踪 IP 地址的更改。
我可以在哪里找到客户端向命名空间发送/从中接收消息的 IP 地址?
我们不记录客户端向命名空间发送或从中接收消息的 IP 地址。 重新生成密钥,以便所有现有的客户端将无法进行身份验证并查看 Azure 基于角色的访问控制 (Azure RBAC) 设置,以确保仅允许的用户或应用程序可以访问该命名空间。
如果使用的是高级命名空间,请使用 IP 筛选、虚拟网络服务终结点和专用终结点来限制对命名空间的访问。
Azure 服务总线的最佳实践有哪些?
请参阅使用服务总线改进性能的最佳做法 - 此文介绍了如何在交换消息时优化性能。
创建实体前的须知事项有哪些?
队列和主题的以下属性是固定不变的。 创建实体时,请考虑此限制,因为只有创建新的替代实体才可修改这些属性。
本部分回答了一些关于服务总线定价结构的常见问题解答。
服务总线定价和计费译文介绍了服务总线中的计费标准。 有关服务总线定价选项的具体信息,请参阅服务总线定价详细信息。
还可以访问 Azure 支持常见问题解答了解常规的 Azure 定价信息。
服务总线如何收取费用?
有关服务总线定价的完整信息,请参阅服务总线定价。 除标示的价格外,还需为在其中部署应用程序的数据中心之外的相关数据输出支付费用。
服务总线的哪些使用情况受数据传输限制? 哪些不受限制?
在给定 Azure 区域内的任何数据传输和入站数据传输均不收费。 区域外的数据传输需收取输出费用,详见此处。
服务总线是否对存储收费?
不能。 服务总线不对存储收费。 但是,对每个队列/主题可以保留的数据最大量设有配额限制。 请参阅下一个常见问题。
我有一个服务总线标准命名空间。 为什么我在资源组 `$system` 下看到了费用?
Azure 服务总线最近升级了计费组件。 由于此更改,如果你有服务总线标准命名空间,则可能会在资源组 $system
下看到资源 /subscriptions/<azure_subscription_id>/resourceGroups/$system/providers/Microsoft.ServiceBus/namespaces/$system
的行项。
这些费用表示已预配服务总线标准命名空间的每个 Azure 订阅的基本费用。
请务必注意,这些费用不是新的,即它们也存在于以前的计费模型中。 唯一的更改是它们现在会列在 $system
下。 这是由于新的计费系统中的限制所致,它将订阅级别的费用组在一起,而不是绑定到 $system
资源 ID 下的特定资源。
有关服务总线限制和配额的列表,请参阅服务总线配额概述。
如何处理大小 > 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 订阅。 若要执行此操作,命名空间必须已处于活动状态。 执行这些命令的用户必须是源订阅和目标订阅的管理员。
若要使用 Azure 门户将服务总线命名空间迁移到其他订阅,可按照此处的说明操作。
PowerShell
下面的 PowerShell 命令序列将命名空间从一个 Azure 订阅迁移到另一个 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 或 TLS 1.1?
是的,可以通过设置最低 TLS 版本,在服务总线命名空间上禁用 TLS 1.0 或 1.1。 有关详细信息,请参阅针对发送到服务总线命名空间的请求强制实施必需的最低版本的传输层安全性 (TLS)。
若要了解有关服务总线的详细信息,请参阅以下文章:
Azure 服务总线高级版简介(博客文章)
Azure 服务总线高级版简介 (Channel9)
服务总线概述
服务总线队列入门