我一直在尝试实现一种限制机制,这样只有 N 条消息从队列传递给消费者。这适用于至少一次类型的分布式任务队列。
我尝试过的两种方法,基本上描述了:
提交到一个队列长度为 N 的队列,死信到另一个被观察的队列,当 MessageCount() 再次小于 N 时重新提交到原来的队列。
提交到一个未使用的队列,观察它,并在 MessageCount 小于 N 时提交到已使用的队列。这在扩展观察器部分时有问题。
但是队列长度和消息计数都不计算未确认(进行中),所以这不起作用。
此外,我已经简化了一点,因为节流是每个租户的,例如一个消息头。
我想避免在运行时调出正确数量的消费者,因为这意味着尝试安排和重新安排,例如类型 taskY 的 TennantX 的有限 5 个消费者 - 而只是有 taskY 的消费者,以便通过预取来平衡消费。除非有一些拓扑重写可以完成,至少可以自我修复。
我还想避免将计数器存储在数据库中,因为这可能会与队列不同步并导致死锁。
我也一直在研究其他消息/总线/任务框架,但我想知道在我缺少的 rabbitMQ 中是否有很好的方法来做到这一点?