【问题标题】:Azure Service Bus Filter Not Applied When Defined in ARM Template在 ARM 模板中定义时未应用 Azure 服务总线筛选器
【发布时间】:2017-10-11 17:07:23
【问题描述】:

我在下面定义了一个 ARM 模板的片段,它创建了一个服务总线主题、订阅和规则/过滤器。该规则与主题和订阅一起应用,但过滤器的值为 1=1。为什么不应用表达式?

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

【问题讨论】:

    标签: azure azureservicebus


    【解决方案1】:

    您的订阅规则应定义如下:

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

    【讨论】:

      【解决方案2】:

      我使用以下 ARM 模板创建了服务总线过滤器,它在我这边可以正常工作。更多细节我们可以参考Create a Service Bus namespace with topic, subscription, and rule using an Azure Resource Manager template

      我用 Azure service bus explore检查它

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

      【讨论】:

        猜你喜欢
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        相关资源
        最近更新 更多