0
votes

I've created a service bus, topic, and subscription to that topic in Azure. I have a logic app that is triggered when a message arrives but I need to apply a filter (or rule?) to that subscription where it looks for a particular value in the message header before the logic app processes the message. I don't see anywhere in the logic app or in the Azure portal to create filters for the subscriptions. What mechanism exists to create a filter for a subscription?

1

1 Answers

0
votes

How did you create your topic subscription? did you use ARM Templates?

When you are creating the Subscription, you can add a SqlFilter to the rule applied in the topic subscription.

The ARM Template below (taken from here) shows you how to add a SqlFilter to the Rule in a Topic Subsctiption

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

You need to add your filter using Sql like expressions in the properties member of the rules sub-resource

e.g.

 "sqlExpression": "YourMessageProperty='YourExpectedValue'",

If you are not using ARM Templates, the Service Bus Explorer allows you to remove the default subscription rule and create a new one with your own SqlFilter.

HTH