我打算提供一项服务,让人们可以将任务(特别是转码任务)提交给系统,他们应该尽快得到服务,但同时它不应该饿死别人,即它必须是公平的。如果一个人提交2000个任务,那么系统不应该一直只迎合他,而是在其他人的请求中进行循环或类似的事情...
有没有可用的解决方案?我查看了rabbitMQ和其他消息传递系统,但它们并不能完全满足我的问题。公平的任务队列是如何实现的?
答案 0 :(得分:2)
我会这样实现:
在队列上有一个队列侦听器,当一个消息到达时,检查上一次收到给定用户的任务;如果时间&lt;如果时间&lt; 1秒,将它放在队列1上如果时间<1,则将10秒放在队列2上100秒放在队列3上,否则放在队列4上。然后,您将在4个队列上拥有将处理任务的侦听器。
当然,您可以更改队列数并更改时间以匹配最佳吞吐量。理想情况下,您希望您的队列始终处于忙碌状态。
答案 1 :(得分:1)
我不认为这种行为本身存在,但我可以看到它是用RabbitMQ的一些功能实现的。
http://www.rabbitmq.com/blog/2010/08/03/well-ill-let-you-go-basicreject-in-rabbitmq/
这会让你拒绝邮件并重新排队。然后,您必须编写一个实用程序,该实用程序可以根据消息的某些标识属性选择执行或重新排队消息(在本例中,报表请求者是您的应用程序自定义的)。可以想象,如果策略包含您试图限制的用户的ID,则可以完全围绕路由密钥设计策略。
您的政策可以使用
进行结构化希望这有帮助!