要解决的问题:防止客户挨饿其他客户。
我计划让每个客户拥有自己的队列,然后从所有队列中消耗一个 Consumer 。在我的情况下,可能有数百个客户,但排队很便宜。具有合理的低prefetch count默认代理行为(to randomly select which queue to pop from)应该会产生令人满意的结果。
此策略的问题在于新客户出现时。我可以懒惰地创建队列并将其绑定到 Publisher 中的交换msg.in
。但是如何让 Consumer 从这个新的customer.xxx
队列中消费?
这几乎是Topics pattern,但不是真的,因为每个客户端都需要一个缓冲区。用Priority解决每个客户的消息顺序也不能解决这个问题。有没有办法根据模式消费?就像有绑定一样,例如。 customer.*
。
轮询management API是一个选项,但会延迟处理新客户的第一条消息,直到消费者进行了轮询。为 Consumer 可以采取行动的元数据(如new customer.003
)设置单独的pub/sub渠道可以减少延迟(并避免轮询API),但会使发布者更复杂。
我觉得那里有一个很好的解决方案,我还没有找到它。感谢您的反馈!