带有 rebus 的优先级队列,由消费者而不是发布者控制

Priority Queues with rebus, controlled by consumer instead of publisher

查看在线优先级队列的示例,标准似乎是发布者设置消息的优先级。如果消息本身具有指示 "Fire detected!" 的含义,这是有道理的。

如果优先级更多地由消费者决定怎么办?我的场景是这样的,我有 100 多个客户生成消息,客户 A 希望我有一个专门的消息消费者来处理他们的消息。我不想每次出现这种情况时都必须更换我所有的制作人。 (也许他们停止付款,也许其他人也想要这个,也许我们用它来缓解一些 devops 问题...)

我有办法做到这一点吗?消费者能否 "scan" 队列中的所有消息并 "pass" 处理消息?

Rebus 确实无法 "scan" 消息或以任何其他方式事先知道哪些消息可用,以便选择一个进行处理。

通常,对于消息队列,当您收到一条消息时,您只会收到下一条消息。

如果您需要某种智能来了解在需要处理消息时如何挑选消息(我觉得这听起来像那样),我建议您通过将消息排队为 "work items" 来处理消息一个数据库,然后您定期或持续地选择下一个要处理的工作项。

这样,您的工作人员可以在选择下一个工作项目时执行任意复杂的逻辑 - 例如通过跳过未付款的那些,按客户计划订购(例如 "gold customers" 优先于 "silver customers")等

在我看来,这会带来额外的优势,即它会成为应用程序逻辑中更突出的部分,我觉得在这种情况下会很好。

听起来合理吗?