2016-03-28 112 views
1

阅读常见消息队列系统(例如RabbitMQ,ActiveMQ)的文档,似乎负载平衡总是由排队系统(循环)或由生产者使用多个队列完成或消息属性。然而,在我们的应用程序中,没有人,甚至没有消费者知道处理消息需要多长时间。它可以在几毫秒到几小时之间(它基本上是在任意输入x上计算任意函数f)。因此负载平衡应由消费者执行,因为它们只在“负载”低于阈值时才接受消息(负载可以是执行作业的数量,CPU负载等)。理想情况下,生产者将消息放入队列中,消息被“提供”给所有消费者,但只有一个消费者接受并处理消息。甚至可能发生的情况是,没有消费者在第一轮接受它,并且在一个消费者拥有免费资源之前它会一直处于队列中。 所以可能的问题是:这在某种程度上可能与任何常见的消息队列系统是可能的,还是我们正在寻找错误的方向?基于消费者负载均衡的消息队列

回答

0

这是可以实现的,没有任何真正的额外工作,只是由于这些系统的性质。在RabbitMQ中,您可以设置一个prefetch size,它指定要提前提取的作业数量。您将其设置为0,以便每个消费者一次只能有一份工作。您希望将其与消息确认结合使用,以便消费者在提供消息之前必须先回复消息。

所有闲置的使用者将排队等待作业,并且MQ将按FIFO顺序将作业推迟给他们。一旦他们完成了处理他们的工作,他们就会确认并且MQ给他们下一份工作。如果没有消费者闲置并准备好工作,则该消息位于队列中,直到消费者变得可用。

+0

谢谢,这听起来很完美。我会试一试。 – sithmein

相关问题