问题描述
我的应用程序有多个队列,我正在尝试确定特定队列的优先级。
resque-pool.yml
development:
"high_priority,med_priority,low_priority": 1
根据resque-pool文档(https://github.com/nevans/resque-pool)示例:
resque-pool.yml
foo: 1
bar: 2
"foo,bar,baz": 1
production:
"foo,baz": 4
“这将启动七个工作进程,一个专门用于foo队列,两个专门用于bar队列,以及四个工作进程优先查看所有队列。使用上面的配置,这类似于您运行以下命令:”
rake resque:work RAILS_ENV=production QUEUES=foo &
rake resque:work RAILS_ENV=production QUEUES=bar &
rake resque:work RAILS_ENV=production QUEUES=bar &
rake resque:work RAILS_ENV=production QUEUES=foo,baz &
rake resque:work RAILS_ENV=production QUEUES=foo,baz &
我认为队列在yaml文件中的优先顺序是优先级,但也希望对其进行验证。
我将如何手动验证是否将high_priority队列中的作业优先于med_priority和low_priority队列中的作业?我是否缺少某些东西以便正确地对它们进行优先排序?
解决方法
您说对了。 Resque documentation主要状态如下:
Resque不支持数字优先级,而是使用您赋予它的队列顺序。我们将此队列列表称为“队列列表”。
比方说,我们除了file_serve队列外,还添加了warm_cache队列。我们现在开始像这样的工人:
$ QUEUES = file_serve,warm_cache rake resque:work
当工作人员寻找新工作时,它将首先检查file_serve。如果找到工作,它将进行处理,然后再次检查file_serve。它将继续检查file_serve,直到没有更多的作业可用为止。届时,它将检查warm_cache。如果找到工作,它将进行处理,然后检查file_serve(重复整个过程)。
通过这种方式,您可以确定某些队列的优先级。
请注意,在resque-pool设置中,产生的每个进程都将遵循其自己的优先级(因此,在示例配置中,如果bar
个作业可以在foo
个作业之前进行处理只有进程bar
是空闲的,而其他进程正忙)。不过,这是一个功能,而不是错误!
关于如何测试它,只需在每个队列中排队一堆作业,然后观察它们是否在resque-web(或日志)中得到处理。