首页 > 解决方案 > 向 Azure 服务总线订阅添加筛选条件

问题描述

我正在使用 Azure 服务总线资源管理器来管理现有 Azure 服务总线主题的订阅。现在我们有了一个新的主题,它将接收来自多个源系统的消息。基于源系统,我需要创建不同的订阅。以下是我们收到的示例消息

消息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"

请帮助我为我需要使用服务总线资源管理器创建的上述服务总线订阅正确过滤表达式。

标签: azureservicebusazure-servicebus-topicsazure-servicebus-subscriptions

解决方案


Azure 服务总线订阅仅在消息头/属性上运行。您可以使用Boolean、Correlation 或 SQL 过滤器SQLFilter实现了超越简单比较的过滤,并且语法是基于 SQL 语言的。

例如,"user.source='system1'""user.source in ('system1', 'system2')"

在您的场景中,我会使用相关过滤器,因为不需要 SQL 过滤器复杂性。除了您对订阅感兴趣之外,每个订阅都有一个用于过滤消息的不同值。你会在这篇文章中找到一个例子。

无论您是否使用关联过滤器的 SQL,过滤都只能在属性上进行。您必须将消息正文中的“源”值提升为标头、系统标头或自定义标头之一。

要查看实际的主题,有一些官方示例:


推荐阅读