在Azure Service Bus订阅SqlFilter表达式中使用参数

时间:2019-01-29 17:28:22

标签: azure-resource-manager azure-servicebus-subscriptions

我正在使用ARM模板来尝试部署对Azure Service Bus主题的订阅,该订阅将基于“收件人”系统属性来过滤消息。我想从ARM模板参数中提取过滤器的值,但是我似乎无法获取模板来解析SqlExpression中的参数。

下面是我一直在使用的模板。我以为我也许可以拨动requirePreprocessing开关来解决部署时的问题,但不要掷骰子。我还尝试过使用方括号或冒号将其转义,如以下链接所示

https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-sql-filter#propertyname

{
 "apiVersion": "2017-04-01",
 "name": "[concat(parameters('mynamespace'), '/', parameters('topic'), '/', parameters('myVariable'),'/direct')]",
 "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions/rules",
 "dependsOn": [
   "[resourceId('Microsoft.ServiceBus/namespaces', parameters('mynamespace'))]",
   "[resourceId('Microsoft.ServiceBus/namespaces/topics', parameters('mynamespace'), parameters('topic'))]",
   "[resourceId('Microsoft.ServiceBus/namespaces/topics/subscriptions', parameters('mynamespace'), parameters('topic'), parameters('myVariable'))]"
 ],
 "properties": {
   "filterType": "SqlFilter",
   "sqlFilter": {
     "sqlExpression": "sys.To=[parameters('myVariable')] OR sys.To IS NULL",
     "requiresPreprocessing": true
     }
}

我得到的是与sqlExpression中显示的字符串完全相同的字符串,但是我想在单引号字符串中获取变量解析为的值。

2 个答案:

答案 0 :(得分:0)

此主题订阅规则只能获取静态值。也许您可以尝试使用静态值而不是[parameters('myVariable')]。该问题可能是由于为属性sys.To提供了动态值。

答案 1 :(得分:0)

您可以使用:"[concat('sys.To=',[parameters('myVariable')],' OR sys.To IS NULL')]"

我认为您不能在ARM模板中使用内联表达式,因此您应该使整个事情成为一个表达式,在这种情况下,请使用concat将各部分粘合在一起。

提示:很难包含单引号,因此像这样的变量可能会派上用场:

"SQ": "'"