这是可能的,我一直在这样做。在我们的情况下,我们需要为处理三种不同类型的作业(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
每个命令都将创建一个延迟作业,因此现在有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个工作进程来处理任何作业。
queue
为2个特定的工作人员添加新的延迟。如何实现而不会影响之前的延迟? - Vishwas Nahar使用Bundler在生产环境中运行:
RAILS_ENV=production bundle exec script/delayed_job -n 4 start
或者不使用Bundler:
ruby script/delayed_job -n 4 start
队列
和延迟作业worker
,是否可能只选择queue
中的一个而不是其他空闲的workers
? - Vishwas NaharQUEUE=email rake jobs:work
QUEUE=build_data rake jobs:work
QUEUES=build_data,email rake jobs:work
QUEUES=build_data,email rake jobs:work
,然后是 QUEUE=another_data rake jobs:work
,它就无法工作了。 - Peter Prabu
run_at
、priority
排序。因此,多个工作进程可以并行处理该表中的不同部分。 - lulalala