首页 文章

具有基于使用者的负载 balancer 的消息队列

提问于
浏览
1

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

1 回答

  • 1

    仅仅由于这些系统的性质,这是可以实现的而没有任何真正的额外工作 . 在RabbitMQ中,您可以设置prefetch size,它指定要提前获取的作业数 . 你'd set this to 0, so that each consumer may only have one job at a time. You want to use this in combination with message acknowledgements, so that a consumer has to ack a message before it'将被提供另一个 .

    所有空闲的消费者将排队等待工作,MQ将按FIFO顺序将作业假脱机 . 一旦他们完成了他们的工作处理,他们就会确定它并且MQ为他们提供队列中的下一个工作 . 如果没有消费者闲置并准备好工作,那么消息就会排在队列中,直到消费者可用 .

相关问题