1

I have defined below a fragment of an ARM template which creates a service bus topic, subscription, and rule/filter. The rule is applied along with the topic and subscription, but the value of the filter is 1=1. Why would the expression not be applied?

{
    "apiVersion": "2017-04-01",
    "name": "[concat(parameters('serviceBusNamespaceName'), '/TOPIC-NAME')]",
    "type": "Microsoft.ServiceBus/namespaces/topics",
    "location": "[variables('location')]",
    "dependsOn": [
        "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
    ],
    "properties": {
        "path": "TOPIC-NAME",
        "duplicateDetectionHistoryTimeWindow": "00:10:00",
        "enableBatchedOperations": false,
        "enablePartitioning": true,
        "enableSubscriptionPartitioning": false,
        "filteringMessagesBeforePublishing": false,
        "maxSizeInMegabytes": 5120
    },
    "resources": [
        {
            "apiVersion": "2017-04-01",
            "name": "SUB-NAME",
            "type": "subscriptions",
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'), '/topics/TOPIC-NAME')]"
            ],
            "properties": {},
            "resources": [
                {
                    "apiVersion": "2017-04-01",
                    "name": "SUB-NAME",
                    "type": "Rules",
                    "dependsOn": [
                        "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'), '/topics/TOPIC-NAME/subscriptions/SUB-NAME')]"
                    ],
                    "properties": {
                        "filter": {
                            "sqlExpression": "MessageType = 'TYPE-OF-MESSAGE' AND MajorVersion = 1"
                        },
                        "action": {
                            "sqlExpression": "SET sys.Label='TYPE-OF-MESSAGE'"
                        }
                    }
                }
            ]
        }
    ]
}
Don Lockhart
  • 894
  • 5
  • 12

2 Answers2

1

Your subscription rule should be defined as follows:

"resources": [
                {
                  "apiVersion": "2017-04-01",
                  "name": "SUB-NAME-FILTER",
                  "type": "Rules",
                  "dependsOn": [
                    "[parameters('serviceBusSubscriptionName')]"
                  ],
                  "properties": {
                    "filterType": "SqlFilter",
                    "sqlFilter": {
                      "sqlExpression": "MessageType = 'TYPE-OF-MESSAGE' AND MajorVersion = 1"
                      "requiresPreprocessing": "false"
                    },
                    "action": {
                        "sqlExpression": "SET sys.Label='TYPE-OF-MESSAGE'"
                    }
                  }
                }
              ]
ansario
  • 345
  • 4
  • 13
0

I create the service bus filter with the following ARM template, it works correctly on my side. More details we could refer to Create a Service Bus namespace with topic, subscription, and rule using an Azure Resource Manager template

I check it with Azure service bus explore

enter image description here

Deploy.json

{
  "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "serviceBusNamespaceName": {
      "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"
      }
    },
    "serviceBusRuleName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Rule"
      }
    }
  },
  "variables": {
    "location": "[resourceGroup().location]",
    "defaultSASKeyName": "RootManageSharedAccessKey",
    "authRuleResourceId": "[resourceId('Microsoft.ServiceBus/namespaces/authorizationRules', parameters('serviceBusNamespaceName'), variables('defaultSASKeyName'))]",
    "sbVersion": "2017-04-01"
  },
  "resources": [
    {
      "apiVersion": "2017-04-01",
      "name": "[parameters('serviceBusNamespaceName')]",
      "type": "Microsoft.ServiceBus/Namespaces",
      "location": "[resourceGroup().location]",
      "sku": {
        "name": "Standard"
      },
      "properties": {},
      "resources": [
        {
          "apiVersion": "2017-04-01",
          "name": "[parameters('serviceBusTopicName')]",
          "type": "Topics",
          "dependsOn": [
            "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
          ],
          "properties": {
            "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
            "maxSizeInMegabytes": "1024",
            "requiresDuplicateDetection": "false",
            "duplicateDetectionHistoryTimeWindow": "PT10M",
            "enableBatchedOperations": "false",
            "supportOrdering": "false",
            "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
            "enablePartitioning": "false",
            "enableExpress": "false"
          },
          "resources": [
            {
              "apiVersion": "2017-04-01",
              "name": "[parameters('serviceBusSubscriptionName')]",
              "type": "Subscriptions",
              "dependsOn": [
                "[parameters('serviceBusTopicName')]"
              ],
              "properties": {
                "lockDuration": "PT1M",
                "requiresSession": "false",
                "defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
                "deadLetteringOnMessageExpiration": "false",
                "maxDeliveryCount": "10",
                "enableBatchedOperations": "false",
                "autoDeleteOnIdle": "P10675199DT2H48M5.4775807S"
              },
              "resources": [
                {
                  "apiVersion": "2017-04-01",
                  "name": "[parameters('serviceBusRuleName')]",
                  "type": "Rules",
                  "dependsOn": [
                    "[parameters('serviceBusSubscriptionName')]"
                  ],
                  "properties": {
                    "filterType": "SqlFilter",
                    "sqlFilter": {
                      "sqlExpression": "MessageType = 'TYPE-OF-MESSAGE' AND MajorVersion = 1",
                      "requiresPreprocessing": "false"
                    },
                    "action": {
                      "sqlExpression": "SET sys.Label='TYPE-OF-MESSAGE'"
                    },
                    "CorrelationFilter": {}
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "outputs": {
    "NamespaceConnectionString": {
      "type": "string",
      "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryConnectionString]"
    },
    "SharedAccessPolicyPrimaryKey": {
      "type": "string",
      "value": "[listkeys(variables('authRuleResourceId'), variables('sbVersion')).primaryKey]"
    }
  }
}

Paramters.json

{ 
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "serviceBusNamespaceName": {
      "value": "xxxx-test"
    },
    "serviceBusTopicName": {
      "value": "armtopipc-test"
    },
    "serviceBusSubscriptionName": {
      "value": "armsubscription-test"
    },
    "serviceBusRuleName": {
      "value": "filterRule-test"
    }
  }
}
Tom Sun - MSFT
  • 24,161
  • 3
  • 30
  • 47