我正在使用Azure Service Bus资源管理器来管理现有Azure Service Bus主题的订阅。现在,我们有了一个新主题,该主题将从多个源系统接收消息。基于源系统,我需要创建不同的订阅。以下是我们收到的示例消息
消息1:
{
"entity": {
"id": "20190501",
"source": "system1",
"body": "{\r\n \"Addressid\": \"74C9\",\r\n \"Start\": \"2016-07-17T21:06:10.983\",\r\n \"OrgID\": \"7204055\",\r\n \"Email\": \"test@gmail.com\",\r\n \"DeptID\": 998\r\n}",
"createDate": "2019-05-16T12:47:52.4658011Z",
"isDeleted": false
},
"operation": "POST"
}
消息2:
{
"entity": {
"id": "20190501",
"source": "system2",
"body": "{\r\n \"AC_ID\": \"74C9\",\r\n \"Name\": \"Name1\",\r\n \"InventoryID\": \"4055\",\r\n \"OtherID\": 998\r\n}",
"createDate": "2019-05-16T12:47:52.4658011Z",
"isDeleted": false
},
"operation": "POST"
}
我需要创建两个具有过滤条件的订阅
订阅1:with filter as "source": "system1"
订阅2:with filter as "source": "system2"
请帮助我为我需要使用服务总线资源管理器创建的上述服务总线订阅正确的过滤器表达式。
答案 0 :(得分:0)
Azure Service Bus订阅仅在消息头/属性上运行。
您可以拥有Boolean, Correlation, or SQL filters。 SQLFilter
class实现的过滤不只是简单的比较,syntax是基于SQL语言的。
例如"user.source='system1'"
或"user.source in ('system1', 'system2')"
在您的方案中,我将使用相关过滤器,只是因为不需要SQL过滤器复杂性。就像您对订阅感兴趣一样,每个订阅都有一个用于过滤消息的独特值。您将在this post中找到一个示例。
无论使用SQL的“相关性”过滤器,过滤都只能在属性上进行。您必须将消息正文中的“源”值提升为标头,系统标头或自定义标头之一。
要查看实际的主题,有一些官方示例: