Create a Service Bus namespace with topic, subscription, and rule using an Azure Resource Manager template

This article shows how to use an Azure Resource Manager template that creates a Service Bus namespace with a topic, subscription, and rule (filter). The article explains how to specify which resources are deployed and how to define parameters that are specified when the deployment is executed. You can use this template for your own deployments, or customize it to meet your requirements

For more information about creating templates, see Authoring Azure Resource Manager templates.

For more information about practice and patterns on Azure resources naming conventions, see Recommended naming conventions for Azure resources.

For the complete template, see the Service Bus namespace with topic, subscription, and rule template.

Note

The following Azure Resource Manager templates are available for download and deployment.

To check for the latest templates, visit the Azure Quickstart Templates gallery and search for Service Bus.

What do you deploy?

With this template, you deploy a Service Bus namespace with topic, subscription, and rule (filter).

Service Bus topics and subscriptions provide a one-to-many form of communication, in a publish/subscribe pattern. When using topics and subscriptions, components of a distributed application do not communicate directly with each other, instead they exchange messages via topic that acts as an intermediary.A subscription to a topic resembles a virtual queue that receives copies of messages that were sent to the topic. A filter on subscription enables you to specify which messages sent to a topic should appear within a specific topic subscription.

What are rules (filters)?

In many scenarios, messages that have specific characteristics must be processed in different ways. To enable this custom processing, you can configure subscriptions to find messages that have specific properties and then perform modifications to those properties. Although Service Bus subscriptions see all messages sent to the topic, you can only copy a subset of those messages to the virtual subscription queue. It is accomplished using subscription filters. To learn more about rules (filters), see Rules and actions.

To run the deployment automatically, click the following button:

Deploy to Azure

Parameters

With Azure Resource Manager, define parameters for values you want to specify when the template is deployed. The template includes a section called Parameters that contains all the parameter values. Define a parameter for those values that vary based on the project you are deploying or based on the environment you are deploying to. Do not define parameters for values that always stay the same. Each parameter value is used in the template to define the resources that are deployed.

The template defines the following parameters:

serviceBusNamespaceName

The name of the Service Bus namespace to create.

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

serviceBusTopicName

The name of the topic created in the Service Bus namespace.

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

serviceBusSubscriptionName

The name of the subscription created in the Service Bus namespace.

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

serviceBusRuleName

The name of the rule(filter) created in the Service Bus namespace.

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

serviceBusApiVersion

The Service Bus API version of the template.

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

Resources to deploy

Creates a standard Service Bus namespace of type Messaging, with topic and subscription and rules.

 "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'"
                        }
                    }
                }]
            }]
        }]
    }]

For JSON syntax and properties, see namespaces, topics, subscriptions, and rules.

Commands to run deployment

To deploy the resources to Azure, you must be signed in to your Azure account and you must use the Azure Resource Manager module. To learn about using Azure Resource Manager with either Azure PowerShell or Azure CLI, see:

The following examples assume you already have a resource group in your account with the specified name.

PowerShell

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

Azure CLI

azure config mode arm

azure group deployment create \<my-resource-group\> \<my-deployment-name\> --template-uri <https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/201-servicebus-create-topic-subscription-rule/azuredeploy.json>

Next steps

Learn how to manage these resources by viewing these articles: