我对在RabbitMQ中实现“工作队列”模型感兴趣。但是,我发现经纪人做了一个简单的基于循环的任务调度给工人。
https://www.rabbitmq.com/tutorials/tutorial-two-java.html
如果某个特定的工作人员忙于执行一项非常繁重的任务并且还有其他免费工作人员,那么经纪人应该能够将队列中的消息发送给下一个可用的工作人员和而不是下一个工作人员循环序列。有没有办法用RabbitMQ来实现这个目标?
答案 0 :(得分:7)
也许您正在寻找基于QoS的公平派遣(https://www.rabbitmq.com/tutorials/tutorial-two-java.html)。
channel.basicQos(1);
使用QoS(1)一个消费者忙,直到不发送ACK
,在这种情况下,另一个消息被发送给下一个免费消费者。
因此,如果消费者有一个漫长的过程,它就不会收到消息。
如果没有免费的消费者,则消息仍留在队列中。