如何在延迟任务队列中指定一个工作进程

4
当使用延迟任务时,如何为特定队列指定一个工作进程?我知道可以运行此命令:
# Use the --pool option to specify a worker pool. You can use this option 
# multiple times to start different numbers of workers for different queues.
# The following command will start 1 worker for the tracking queue, 
# 2 workers for the mailers and tasks queues, and 2 workers for any jobs:

RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start

但是由于我们使用Heroku,因此我们使用Procfile来运行我们的工作者:

worker: bundle exec foreman start -f Procfile.workers 而我们的工作者文件运行作业:

worker_1: bundle exec rake jobs:work
worker_2: bundle exec rake jobs:work

但是我想要做的事情是:

bundle exec rake jobs:work --queue=specific_queue

我希望只有一个工人在处理特定队列,而其他工人在处理其他队列。

我该如何实现这一要求?


我的答案对你有用吗? - Alexandre Angelim
1个回答

4
如果你查看Heroku的“进程类型和Procfile”文档,你会在最后找到一个示例this

例如,使用Ruby,你可以运行两种类型的队列工作进程,每个进程消耗不同的队列:

worker:        env QUEUE=* bundle exec rake resque:work
urgentworker:  env QUEUE=urgent bundle exec rake resque:work

Delayed Job使用类似于Resque的东西。它使用环境变量QUEUE或QUEUES来指定特定工作程序的队列。
您可以在lib/delayed/tasks.rb 源代码中验证此内容。

它做到了。谢谢。 - j will
2
@jwill,worker: env QUEUE=* bundle exec rake resque:work 是否也会处理紧急队列? - knagode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接