Azure 主题订阅筛选器/订阅规则

Azure topic subscription filter / Subscription Rule

我创建了一个示例客户端,它侦听附加到服务总线主题的订阅。现在,无论何时在该主题中发布一条消息,它都会被监听订阅者的客户端捕获。 (如下所述)

https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/GettingStarted/Microsoft.Azure.ServiceBus/TopicSubscriptionWithRuleOperationsSample

现在我想添加一个 filter/rule 以便只有通过过滤器中定义的特定条件的消息才能订阅。

例如,下面是消息内容json,以字符串形式给出,

"{"firstName": "Tony", "LastName": "Stark", "nickName": "Iron Man", "occupation":"actor"}"

我如何创建一个订阅规则来只接收 "occupation": "actor" 的消息。根据 azure 文档,我们需要 SqlFilter 但是直到现在还没有运气,

https://docs.microsoft.com/en-us/azure/service-bus-messaging/topic-filters

https://www.terraform.io/docs/providers/azurerm/r/servicebus_subscription_rule.html#example-usage-sql-filter-

我们正在使用 Terraform 在 Azure Cloud 中创建资源。上面建议的模块link,但是如何定义sql_filter要考虑"occupation":"actor"

filter_type = "SqlFilter" sql_filter = "???"

我试过如下,但得到无效字符“:”

sql_filter = "'occupation':'actor'"

您不能在邮件正文的属性上定义 SQL Filter,因为您的邮件正文可以是任何内容。 SQL Filters 处理 custom properties 一条消息。

例如,如果您想在 occupation 上创建过滤器,则需要在消息中定义自定义属性之一并将其值设置为 actor。那么您的 SQL 过滤器表达式将类似于:

sql_filter = "occupation = 'actor'"

您可能会发现此博客 post 有用:https://www.markheath.net/post/azure-service-bus-filtered-subscriptions