【问题标题】:how do I filter Azure Service Bus Queue messages based on a message property?如何根据消息属性筛选 Azure 服务总线队列消息?
【发布时间】:2014-05-24 12:02:36
【问题描述】:

我正在使用 Azure 服务总线队列从我的应用程序中发送电子邮件。我有许多不同的客户通过我的应用程序发送电子邮件,每条消息都有一个标识该客户的属性:CustomerID

我需要为我的客户编写一个管理区域来查看队列中的待处理消息,更重要的是查看死信队列。我不希望他们看到每个人的死信,所以我想根据属性 CompanyID 过滤消息。

我该如何做到这一点?

我阅读了有关主题和订阅的信息,但我每周至少添加 10 多个客户,这对我来说不是一个合理的解决方案。

【问题讨论】:

    标签: c# azure servicebus


    【解决方案1】:

    队列不支持过滤。您可以编写管理客户端来获取所有消息并在客户端进行过滤,但请考虑主题/订阅,因为您可以轻松地为每个主题添加多达 2000 个订阅,然后按客户等过滤这些消息。对于您想要重复查询的内容如上所述的一种方法,您有一个守护进程解析队列并更新一个表,然后每个客户对该状态表运行查询会更好。

    【讨论】:

      【解决方案2】:

      队列通常不适合查询和高级过滤场景。当客户检查状态时偷看大队列会破坏使用服务总线的全部目的。

      我的建议是将已启动任务的状态存储在 Azure 表存储中。一旦工作角色处理或处理队列中的消息失败,它可以简单地更新表存储中的状态。

      【讨论】:

        【解决方案3】:

        您可以在 PEEK_LOCK 模式下使用利用receiveMessages() API 的轮询机制,以实现对队列的过滤并维持对通过您的过滤器的消息流的订阅。

        我试图在这个项目中编写一个示例实现 - Find GitHub Repo Here

        另外,您可以查看this article 以了解其用法和范围。

        【讨论】:

          猜你喜欢
          • 2016-02-06
          • 2014-11-03
          • 2017-11-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多