让我们假设这样的工作流程:
+-----------+
+--+ | |
+--->+Q1+---->+ SLOW PROC |
| +--+ | |
| +-----------+
+-----------+ | +-----------+
| | +------+ | +--+ | |
| FAST PROC +---+FANOUT+--->---->+Q2+-----> SLOW PROC |
| | +------+ | +--+ | |
+-----------+ | +-----------+
| +-----------+
| +--+ | |
+---->Q3+---->+ SLOW PROC |
+--+ | |
+-----------+
快速过程(发布者)由无限来源提供。我需要确保填充Q1..Q3的速度不如慢进程(消费者)能够处理的速度快。
我可以通过在Q1..Q3上设置一个限制来实现,并在失败时重新发布消息。
但是根据docs:
该消息仍将发布到所有其他可以排队的队列。
那是一个问题,因为我只需要将每条消息传递给每个消费者一次。但是,我怎么能只重新发布给第一次无法使用的消费者?
有什么方法可以实现小于实际限制的软限制并在达到硬限制之前获得通知?这样一来,快速proc可能会退却,但仍会传递所有消息。
甚至更好:是否有可能获得所有绑定队列的消息计数? (使用Python / Pika)