您可能已经注意到调度仍然不能像我们想要的那样正常工作。例如在有两个工人的情况下,当所有奇怪的信息都很重,甚至信息很轻时,一个工作人员就会一直很忙,而另一个工人几乎不会做任何工作。那么,RabbitMQ不知道任何关于这个,并将仍然均匀地发送消息。
发生这种情况是因为RabbitMQ只在消息进入队列时调度消息。它没有考虑消费者未确认消息的数量。它只是盲目地把第n条消息分发给第n个消费者。
为了改变这种行为,我们可以使用basicQos方法和 prefetchCount = 1设置。这告诉RabbitMQ一次不能给一个工作者多个消息。或者换句话说,不要向工作人员发送新消息,直到处理并确认了前一个消息。相反,它会将其分派给下一个还不忙的工作人员。
我们可以使用 channel.BasicQos(0, 1, false); 来规定,它是在消费者那里
关于队列大小的说明
如果所有的工人都很忙,你的队伍就可以填满了。你会想要关注一下,也许会增加更多的工人,或者有其他的策略。