RabbitMQ学习(公平派遣)

Posted missliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ学习(公平派遣)相关的知识,希望对你有一定的参考价值。

您可能已经注意到调度仍然不能像我们想要的那样正常工作。例如在有两个工人的情况下,当所有奇怪的信息都很重,甚至信息很轻时,一个工作人员就会一直很忙,而另一个工人几乎不会做任何工作。那么,RabbitMQ不知道任何关于这个,并将仍然均匀地发送消息。

发生这种情况是因为RabbitMQ只在消息进入队列时调度消息。它没有考虑消费者未确认消息的数量。它只是盲目地把第n条消息分发给第n个消费者。

技术分享图片

为了改变这种行为,我们可以使用basicQos方法和 prefetchCount = 1设置。这告诉RabbitMQ一次不能给一个工作者多个消息。或者换句话说,不要向工作人员发送新消息,直到处理并确认了前一个消息。相反,它会将其分派给下一个还不忙的工作人员。

我们可以使用 channel.BasicQos(0, 1, false); 来规定,它是在消费者那里

关于队列大小的说明

如果所有的工人都很忙,你的队伍就可以填满了。你会想要关注一下,也许会增加更多的工人,或者有其他的策略。

 

以上是关于RabbitMQ学习(公平派遣)的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ学习之Work Queues

RabbitMQ学习第二记:工作队列的两种分发方式,轮询分发(Round-robin)和 公平分发(Fair dispatch)

RabbitMQ学习笔记(自用)

RabbitMQ简单应用の公平分发(fair dipatch)

RabbitMQ学习第一记:用java连接RabbitMQ

Java使用RabbitMQ之公平分发