是否有一种方法可以限制RabbitMQ队列只将固定数量的消息从队列发送给消费者?
我有两个队列Q1和Q2,10个consumers.Every使用者可以处理来自Q1和Q2的消息,在任何给定的时间,只有两个消费者应该处理来自Q2的消息,所有这10个消费者都可以同时处理来自Q1的消息。
在RabbitMQ中是否有我们可以指定的配置,以便RabbitMQ只将2条消息从Q2推送给任何空闲的使用者,并且只有在它们被确认之后才将下一条消息推送到下一条消息中,即使其他消费者是免费的,并且可以使用。
关于这一问题的更多背景资料:
为什么每次只处理2条消息?:Q2消息正在进行web服务调用,web服务端点(第三方)只能同时处理2条消息。
我们不能使用并发性吗?:如果我们使用ListenerContainer (Spring ),容器是每个消费者。我们可以限制一个消费者一次可以接收多少条消息,但是当我们有10个消费者时,如果队列中有消息,每个消费者将得到自己的份额。
我们能否只配置两个收听Q2的消费者?:我知道我们可以通过只为Q2配置两个消费者来实现这一点,但我试图避免这种情况。如果由于某种原因,这两个消费者下降,Q2的处理将停止。如果配置了10个消费者,我们可以保证处理过程会一直持续到最后一个消费者下降为止。
看看RabbitMQ中是否有我们可以使用的配置或任何建议的解决方案。
提前谢谢!
发布于 2019-03-09 16:53:02
我觉得你已经被问题定义所困扰了。你真正需要的是琐碎的东西,所以让我们把它分解一下。
给定两个队列,Q1和Q2
对问题陈述的评论
首先,假定队列是独立的。独立的进程P将具有队列Q,因此Q1服务于进程P1。这是一个严格的数学要求--您不能为单个进程P定义两个队列。
因此,第二个约束在数学上是不正确的,其原因与您无法编写接受string和bool类型参数的有效函数相同。它必须接受其中一种或另一种,因为它们是不兼容的类型,或者它必须接受这些类型的单一共同祖先而不考虑子类型。这是Liskov代换原理的一个变体。
重新定义问题
该系统共有12名消费者:
Q1有10个消费者Q2有2个消费者在RabbitMQ中是否有我们可以指定的配置,以便RabbitMQ只将2条消息从Q2推送给任何空闲的使用者,并且只有在它们被确认之后才将下一条消息推送到下一条消息中,即使其他消费者是免费的,并且可以使用。
根据问题的新定义,您有两个选项:
Basic.Get -在使用者处理完最后一条消息后立即从队列中提取下一条消息。Note指出,通过正确定义问题空间,我们消除了基本问题,即如何设法确保在任何时候只有两个消费者在处理Q2消息。
https://stackoverflow.com/questions/55072701
复制相似问题