我对在RabbitMQ中实现"工作队列"模型很感兴趣。然而,我发现代理执行一个简单的基于循环的任务分派给工人。
https://www.rabbitmq.com/tutorials/tutorial-two-java.html如果一个特定的worker正在忙着做一个非常繁重的任务,并且有其他空闲的worker,代理应该能够将队列中的消息分派给下一个可用的worker和,而不是轮询序列中的下一个worker。是否有一种方法来完成这个使用RabbitMQ?
也许你正在寻找基于QoS的公平调度(https://www.rabbitmq.com/tutorials/tutorial-two-java.html)
channel.basicQos(1);
使用QoS(1)一个消费者忙,直到不发送ACK
,在这种情况下,另一个消息被发送到下一个空闲的消费者。
因此,如果消费者有一个很长的流程要做,它不会接收消息。
如果没有空闲的消费者,消息将留在队列中。