Compartilhar via

为 Azure Service Bus 队列和订阅启用自动转发

Service Bus自动转发功能使你可以将队列或订阅链接到属于同一命名空间的另一个队列或主题。 启用自动转发后,Service Bus会自动删除放置在第一个队列或订阅(源)中的消息,并将其放入第二个队列或主题(目标)。 仍可将消息直接发送到目标实体。 有关详细信息,请参阅使用自动转发链接Service Bus实体。 本文介绍了对 Service Bus 队列和订阅启用自动转发的不同方法。

重要

Service Bus的基本层不支持自动转发功能。 标准层和高级层支持该功能。 有关这些层之间的差异,请参阅 Service Bus 定价

使用 Azure 门户

在 Azure 门户中为主题创建 queuesubscription 时,请选择 转发消息到队列/主题,如下示例所示。 然后指定是否要将消息转发到队列或主题。 在本示例中,选择了“队列”选项,并选择了同一命名空间中的队列。

创建已启用自动转发的队列

在创建队列时启用自动转发

为已启用自动转发的主题创建订阅

在创建订阅时启用自动转发

更新现有队列的自动转发设置

在 Service Bus 队列的 Overview 页上,选择 Forward 消息设置的当前值。 在以下示例中,当前值为“禁用”。 在“向队列/主题转发邮件”窗口中,可以选择要将邮件转发到的队列或主题。

为现有队列启用自动转发

更新现有订阅的自动转发设置

在您的 Service Bus 订阅的 Overview 页面上,选择“转发消息到”设置的当前值。 在以下示例中,当前值为“禁用”。 在“向队列/主题转发邮件”窗口中,可以选择要将邮件转发到的队列或主题。

为现有订阅启用自动转发

使用Azure CLI

若要创建启用了自动转发的队列,请使用 命令,并将 az servicebus queue create 设置为您要将消息转发到的队列或主题的名称。

az servicebus queue create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --forward-to myqueue2

若要更新现有队列的自动转发设置,请使用 命令,并将 az servicebus queue update 设置为要将邮件转发到的队列或主题的名称。

az servicebus queue update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --name myqueue \
    --forward-to myqueue2

若要为已启用自动转发的主题创建订阅,请使用 命令,并将 az servicebus topic subscription create 设置为要将邮件转发到的队列或主题的名称。

az servicebus topic subscription create \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --topic-name mytopic \
    --name mysubscription \
    --forward-to myqueue2

若要更新主题订阅的自动转发设置,请使用 命令,并将 az servicebus topic subscription update 设置为要将邮件转发到的队列或主题的名称。

az servicebus topic subscription update \
    --resource-group myresourcegroup \
    --namespace-name mynamespace \
    --topic-name mytopic \
    --name mysubscription \
    --forward-to myqueue2

使用 Azure PowerShell

若要创建启用了自动转发的队列,请使用 命令,并将 New-AzServiceBusQueue 设置为您要将消息转发到的队列或主题的名称。

New-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name myqueue `
    -ForwardTo myqueue2

若要更新现有队列的自动转发设置,请使用 命令,如以下示例所示。

Set-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name myqueue `
    -ForwardTo myqueue2

要创建一个启用自动转发功能的主题订阅,请使用 命令,并将 New-AzServiceBusSubscription 设置为您希望将消息转发到的队列或主题名称。

New-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -TopicName mytopic `
    -Name mysubscription `
    -ForwardTo myqueue2

若要更新现有订阅的自动转发设置,请参阅以下示例。

Set-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -TopicName mytopic `
    -Name mysub `
    -ForwardTo mytopic2 

使用模板

若要创建已启用自动转发的队列,请在“队列属性”部分中将 设置为要将消息转发到的队列或主题的名称。 有关详细信息,请参阅 Microsoft.ServiceBus 命名空间/队列模板参考

@description('Name of the Service Bus namespace')
param serviceBusNamespaceName string

@description('Name of the Queue')
param serviceBusQueueName string

@description('Location for all resources.')
param location string = resourceGroup().location

resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
  name: serviceBusNamespaceName
  location: location
  sku: {
    name: 'Standard'
  }

  resource queue 'queues' = {
    name: serviceBusQueueName
    properties: {
      forwardTo: 'myqueue2'
    }
  }
}

若要 为启用了自动转发的主题创建订阅,请在订阅属性部分设置为 forwardTo 要转发消息的队列或主题的名称。 有关详细信息,请参阅 Microsoft.ServiceBus 命名空间/主题/订阅模板参考

@description('Name of the Service Bus namespace')
param serviceBusNamespaceName string

@description('Name of the Topic')
param serviceBusTopicName string

@description('Name of the Subscription')
param serviceBusSubscriptionName string

@description('Location for all resources.')
param location string = resourceGroup().location

resource serviceBusNamespace 'Microsoft.ServiceBus/namespaces@2024-01-01' = {
  name: serviceBusNamespaceName
  location: location
  sku: {
    name: 'Standard'
  }

  resource topic 'topics' = {
    name: serviceBusTopicName
    properties: {
      maxSizeInMegabytes: 1024
    }

    resource subscription 'subscriptions' = {
      name: serviceBusSubscriptionName
      properties: {
        forwardTo: 'myqueue2'
      }
    }
  }
}

.NET

Azure.Messaging.ServiceBus(最新)

可以通过以下方法启用自动转发功能:设置 CreateQueueOptions.ForwardToCreateSubscriptionOptions.ForwardTo,然后使用采用 参数的 CreateQueueOptionsCreateSubscriptionOptions 方法。

微软。Azure。ServiceBus (旧版)

可以通过设置源的 QueueDescription.ForwardToSubscriptionDescription.ForwardTo 来启用自动转发,如以下示例所示:

SubscriptionDescription srcSubscription = new SubscriptionDescription (srcTopic, srcSubscriptionName);
srcSubscription.ForwardTo = destTopic;
namespaceManager.CreateSubscription(srcSubscription));

注意

2026 年 9 月 30 日,我们将停用 Azure Service Bus SDK 库 WindowsAzure.ServiceBus Microsoft.Azure。ServiceBus 和 com.microsoft。azure.servicebus 不符合Azure SDK准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 在该日期之前迁移到最新的 Azure SDK 库,这些库提供关键的安全更新和改进的功能。

尽管旧库仍可在 2026 年 9 月 30 日以后使用,但它们将不再从Azure获得官方支持和更新。 有关详细信息,请参阅支持停用公告

Java

azure-messaging-servicebus(最新)

可以通过以下方法启用自动转发功能:使用 CreateQueueOptions.setForwardTo(String forwardTo) 方法或 CreateSubscriptionOptions.setForwardTo(String forwardTo),然后使用 createQueue 方法或 createSubscription 方法,这些方法使用 CreateQueueOptionsCreateSubscriptionOptions 参数。

azure-servicebus(旧版)

可以在源中使用 QueueDescription.setForwardTo(String forwardTo)SubscriptionDescription.setForwardTo(String forwardTo) 来启用自动转发。

注意

2026 年 9 月 30 日,我们将停用 Azure Service Bus SDK 库 WindowsAzure.ServiceBus Microsoft.Azure。ServiceBus 和 com.microsoft。azure.servicebus 不符合Azure SDK准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 在该日期之前迁移到最新的 Azure SDK 库,这些库提供关键的安全更新和改进的功能。

尽管旧库仍可在 2026 年 9 月 30 日以后使用,但它们将不再从Azure获得官方支持和更新。 有关详细信息,请参阅支持停用公告

后续步骤

尝试使用所选语言的示例来探索Azure Service Bus功能。

查找较旧的.NET和Java客户端库的示例:

注意

2026 年 9 月 30 日,我们将停用 Azure Service Bus SDK 库 WindowsAzure.ServiceBus Microsoft.Azure。ServiceBus 和 com.microsoft。azure.servicebus 不符合Azure SDK准则。 我们还将结束对 SBMP 协议的支持,因此在 2026 年 9 月 30 日之后,你将无法再使用此协议。 在该日期之前迁移到最新的 Azure SDK 库,这些库提供关键的安全更新和改进的功能。

尽管旧库仍可在 2026 年 9 月 30 日以后使用,但它们将不再从Azure获得官方支持和更新。 有关详细信息,请参阅支持停用公告