我正在使用delayed_job并转移到一个新的更强大的服务器。所以现在我想运行并行作业,就像现在I have the POWER!一样,但是对于delayed_job是否可以运行多个并行队列感到困惑?
This question建议有命名的队列,但这些都是从一个表中运行的,因此是顺序的吗?
在底部@Jesse Wolgamott建议您可以为每个队列创建一个表,然后以并行方式运行。
有没有人这样做过,他们能指出我是如何做到的吗?
答案 0 :(得分:31)
这是可能的,而且我一直这样做。在我们的例子中,我们需要多个作业来处理三种不同的作业,例如queue_a,queue_b和queue_c。系统将在delayed_job表中创建条目,并且队列命名相应。
启动多个延迟的作业,例如
RAILS_ENV=production script/delayed_job -i first --queue=queue_a start
RAILS_ENV=production script/delayed_job -i second --queue=queue_a start
RAILS_ENV=production script/delayed_job -i third --queue=queue_b start
RAILS_ENV=production script/delayed_job -i fourth --queue=queue_c start
每个命令都会创建一个delayed_job,因此现在将有4个并行作业,其中两个服务于queue_a,另一个用于queue_b和queue_c。这里的关键是通过-i
选项传递的标识符,它指定实例名称,我们可以根据需要启动和停止作业。
另一个选择是使用工作池。
RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start
该命令将为跟踪队列启动1名工作人员,为邮件程序和任务队列启动2名工作人员,为任何工作启动2名工作人员。
答案 1 :(得分:12)
在生产中使用捆绑包:
RAILS_ENV=production bundle exec script/delayed_job -n 4 start
或没有捆绑
ruby script/delayed_job -n 4 start
答案 2 :(得分:3)
如果您使用rake任务作为作业启动机制,则可以使用QUEUE环境变量启动由队列分隔的不同工作程序作业。
示例:
QUEUE=email rake jobs:work
QUEUE=build_data rake jobs:work
QUEUES变量允许一个队列从特定工作人员的多个DJ队列中出发。
QUEUES=build_data,email rake jobs:work
如果您使用的是托管/云环境(例如Heroku),则可以直接启用脚本/作业,从而特别有用。