在 ARM 模板中定义时未应用 Azure 服务总线筛选器
Azure Service Bus Filter Not Applied When Defined in ARM Template
我在下面定义了一个 ARM 模板片段,它创建了一个服务总线主题、订阅和 rule/filter。规则与主题和订阅一起应用,但过滤器的值为 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'"
}
}
}
]
}
]
}
您的订阅规则应定义如下:
"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'"
}
}
}
]
我使用以下 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"
}
}
}
我在下面定义了一个 ARM 模板片段,它创建了一个服务总线主题、订阅和 rule/filter。规则与主题和订阅一起应用,但过滤器的值为 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'"
}
}
}
]
}
]
}
您的订阅规则应定义如下:
"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'"
}
}
}
]
我使用以下 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"
}
}
}