【问题标题】:Adding filter criteria to Azure Service Bus Subscriptions向 Azure 服务总线订阅添加筛选条件
【发布时间】:2019-05-21 10:25:11
【问题描述】:

我正在使用 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"

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

【问题讨论】:

    标签: azureservicebus azure-servicebus-topics azure-servicebus-subscriptions


    【解决方案1】:

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

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

    在您的场景中,我会使用相关过滤器只是因为不需要 SQL 过滤器复杂性。除了您对订阅感兴趣之外,每个订阅都有一个用于过滤消息的不同值。您可以在 this post 中找到一个示例。

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

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

    【讨论】:

    • 感谢您的建议,我们会尝试做出改变。
    • 这有望为其他人节省一些时间。如果用户定义的属性中有特殊字符(例如:'-'),请在 Azure 服务总线资源管理器(或任何位置)中使用以下语法来引用 SQL 筛选器中的属性:user."X-Custom-Property"='ValueToCompare'"X-Custom-Property"='ValueToCompare' where 'X -Custom-Property' 是您的属性名称。
    猜你喜欢
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    相关资源
    最近更新 更多