使用 Azure 资源管理器模板创建包含主题、订阅和规则的服务总线命名空间

本文介绍如何使用 Azure 资源管理器模板,创建包含主题、订阅和规则(筛选器)的服务总线命名空间。 本文介绍如何指定要部署的资源以及如何定义执行部署时指定的参数。 可将此模板用于自己的部署,或自定义此模板以满足要求

有关创建模板的详细信息,请参阅创作 Azure 资源管理器模板

有关 Azure 资源命名约定的实践和模式的详细信息,请参阅 Azure 资源的建议命名约定

有关完整模板,请参阅包含主题、订阅和规则的服务总线命名空间模板。

要部署什么?

使用此模板,你将部署包含主题、订阅和规则(筛选器)的服务总线命名空间。

服务总线主题和订阅以“发布/订阅”模式提供一对多的通信形式。 使用主题和订阅时,分布式应用程序的组件之间不会直接通信,它们会通过用作中介的主题来交换消息。主题订阅类似于虚拟队列,接收发送至该主题的消息副本。 通过订阅中的筛选器,可以指定发送到主题的哪些消息应该在特定主题订阅中显示。

什么是规则(筛选器)?

在许多情况下,必须以不同方式处理具有特定特征的消息。 若要启用此自定义处理,可配置订阅以找到具有特定属性的消息,并对这些属性执行修改。 虽然服务总线订阅可看到发送到主题的所有消息,但你可仅将部分消息复制到虚拟订阅队列。 可使用订阅筛选器完成此操作。 若要深入了解规则(筛选器),请参阅规则和操作

若要自动运行部署,请单击以下按钮:

部署到 Azure

参数

使用 Azure 资源管理器,可以定义在部署模板时想要指定的值的参数。 该模板具有一个名为 Parameters 的部分,其中包含所有参数值。 请根据要部署的项目或要部署到的环境的不同,为那些值定义参数。 不要为永远保持不变的值定义参数。 每个参数值可在模板中用来定义所部署的资源。

模板定义以下参数:

serviceBusNamespaceName

要创建的服务总线命名空间的名称。

"serviceBusNamespaceName": {
"type": "string"
}

serviceBusTopicName

在服务总线命名空间中创建的主题的名称。

"serviceBusTopicName": {
"type": "string"
}

serviceBusSubscriptionName

在服务总线命名空间中创建的订阅的名称。

"serviceBusSubscriptionName": {
"type": "string"
}

serviceBusRuleName

在服务总线命名空间中创建的规则(筛选器)的名称。

   "serviceBusRuleName": {
   "type": "string",
  }

serviceBusApiVersion

模板的服务总线 API 版本。

"serviceBusApiVersion": {
       "type": "string",
       "defaultValue": "2017-04-01",
       "metadata": {
           "description": "Service Bus ApiVersion used by the template"
       }

要部署的资源

创建类型为 Messaging的包含主题、订阅和规则的标准服务总线命名空间。

 "resources": [{
        "apiVersion": "[variables('sbVersion')]",
        "name": "[parameters('serviceBusNamespaceName')]",
        "type": "Microsoft.ServiceBus/Namespaces",
        "location": "[variables('location')]",
        "sku": {
            "name": "Standard",
        },
        "resources": [{
            "apiVersion": "[variables('sbVersion')]",
            "name": "[parameters('serviceBusTopicName')]",
            "type": "Topics",
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ],
            "properties": {
                "path": "[parameters('serviceBusTopicName')]"
            },
            "resources": [{
                "apiVersion": "[variables('sbVersion')]",
                "name": "[parameters('serviceBusSubscriptionName')]",
                "type": "Subscriptions",
                "dependsOn": [
                    "[parameters('serviceBusTopicName')]"
                ],
                "properties": {},
                "resources": [{
                    "apiVersion": "[variables('sbVersion')]",
                    "name": "[parameters('serviceBusRuleName')]",
                    "type": "Rules",
                    "dependsOn": [
                        "[parameters('serviceBusSubscriptionName')]"
                    ],
                    "properties": {
                        "filterType": "SqlFilter",
                        "sqlFilter": {
                            "sqlExpression": "StoreName = 'Store1'",
                            "requiresPreprocessing": "false"
                        },
                        "action": {
                            "sqlExpression": "set FilterTag = 'true'"
                        }
                    }
                }]
            }]
        }]
    }]

有关 JSON 语法和属性,请参阅命名空间主题订阅规则

运行部署的命令

要将资源部署到 Azure,必须登录到 Azure 帐户,并且必须使用 Azure 资源管理器模块。 若要了解配合使用 Azure 资源管理器和 Azure PowerShell 或 Azure CLI 的相关信息,请参阅:

以下示例假定帐户中已具有一个指定名称的资源组。

PowerShell

New-AzureResourceGroupDeployment -Name \<deployment-name\> -ResourceGroupName \<resource-group-name\> -TemplateUri <https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/quickstarts/microsoft.servicebus/servicebus-create-topic-subscription-rule/azuredeploy.json>

Azure CLI

az cloud set -n AzureChinaCloud
az login
az deployment group create -g \<my-resource-group\> --template-uri <https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/quickstarts/microsoft.servicebus/servicebus-create-topic-subscription-rule/azuredeploy.json>

后续步骤

通过查看以下文章了解如何管理这些资源: