你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为 Azure 服务总线队列和订阅启用自动转发

通过服务总线自动转发功能可将队列或订阅链接到同一命名空间中的另一个队列或主题。 启用自动转发时,服务总线会自动删除放置在第一个队列或订阅(源)中的消息,并将其放入第二个队列或主题(目标)中。 仍可将消息直接发送到目标实体。 有关详细信息,请参阅使用自动转发链接服务总线实体。 本文介绍为服务总线队列和订阅启用自动转发的不同方式。

重要

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

使用 Azure 门户

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

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

Enable auto forward at the time of the queue creation

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

Enable auto forward at the time of the subscription creation

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

在服务总线队列的“概述”页上,为“邮件转发对象”设置选择当前值 。 在以下示例中,当前值为“禁用”。 在“向队列/主题转发邮件”窗口中,可以选择要将邮件转发到的队列或主题。

Enable auto forward for an existing queue

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

在服务总线订阅的“概述”页上,为“邮件转发对象”设置选择当前值 。 在以下示例中,当前值为“禁用”。 在“向队列/主题转发邮件”窗口中,可以选择要将邮件转发到的队列或主题。

Enable auto forward for an existing subscription

使用 Azure CLI

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

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

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

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

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

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

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

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

使用 Azure PowerShell

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

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

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

$queue=Get-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue 

$queue.ForwardTo='myqueue2'

Set-AzServiceBusQueue -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -QueueName myqueue `
    -QueueObj $queue

若要为已启用自动转发的主题创建订阅,请使用 -ForwardTo 设置为要将消息转发到的队列或主题的名称的 New-AzServiceBusSubscription 命令。

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

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

$subscription=Get-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -TopicName mytopic `
    -SubscriptionName mysub

$subscription.ForwardTo='mytopic2'

Set-AzServiceBusSubscription -ResourceGroup myresourcegroup `
    -NamespaceName mynamespace `
    -Name mytopic `
    -SubscriptionName mysub `
    -SubscriptionObj $subscription 

使用 Azure 资源管理器模板

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "serviceBusNamespaceName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Service Bus namespace"
      }
    },
    "serviceBusQueueName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Queue"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.ServiceBus/namespaces",
      "apiVersion": "2018-01-01-preview",
      "name": "[parameters('serviceBusNamespaceName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {},
      "resources": [
        {
          "type": "Queues",
          "apiVersion": "2017-04-01",
          "name": "[parameters('serviceBusQueueName')]",
          "dependsOn": [
            "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]"
          ],
          "properties": {
            "forwardTo": "myqueue2"
          }
        }
      ]
    }
  ]
}

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "service_BusNamespace_Name": {
      "type": "string",
      "metadata": {
        "description": "Name of the Service Bus namespace"
      }
    },
    "serviceBusTopicName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Topic"
      }
    },
    "serviceBusSubscriptionName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Subscription"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "resources": [
    {
      "apiVersion": "2018-01-01-preview",
      "name": "[parameters('service_BusNamespace_Name')]",
      "type": "Microsoft.ServiceBus/namespaces",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard"
      },
      "properties": {},
      "resources": [
        {
          "apiVersion": "2017-04-01",
          "name": "[parameters('serviceBusTopicName')]",
          "type": "topics",
          "dependsOn": [
            "[resourceId('Microsoft.ServiceBus/namespaces/', parameters('service_BusNamespace_Name'))]"
          ],
          "properties": {
            "maxSizeInMegabytes": 1024
          },
          "resources": [
            {
              "apiVersion": "2017-04-01",
              "name": "[parameters('serviceBusSubscriptionName')]",
              "type": "Subscriptions",
              "dependsOn": [
                "[parameters('serviceBusTopicName')]"
              ],
              "properties": {
                "forwardTo": "myqueue2"
              }
            }
          ]
        }
      ]
    }
  ]
}

.NET

Azure.Messaging.ServiceBus(最新版)

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

Microsoft.Azure.ServiceBus(旧版)

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

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

Java

azure-messaging-servicebus(最新)

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

azure-servicebus(旧版)

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

后续步骤

尝试采用所选语言的示例,了解 Azure 服务总线功能。

在下面查找早期 .NET 和 Java 客户端库示例: