延迟作业排除队列

Sir*_*ins 5 ruby-on-rails delayed-job

我有一个延迟的作业队列,其中包含运行速度特别慢的任务,我希望由它自己的一组专用工作人员处理这些任务,因此它会阻碍其余工作人员管道的风险较小。

RAILS_ENV=production script/delayed_job --queue=super_slow_stuff start

但是,我还想要一个用于所有其他队列的通用工作池,希望不必单独指定它们(因为它们的名称等也经常更改/添加)。类似于:

RAILS_ENV=production script/delayed_job --except-queue=super_slow_stuff start

我可以使用通配符*字符,但我想这会导致第二个工人也接过超级慢的工作吗?

对此有何建议?

小智 1

您可以为应用程序的所有队列定义一个全局常量。

QUEUES={
  mailers: 'mailers',
  etc..
}
Run Code Online (Sandbox Code Playgroud)

然后在你的延迟方法调用中使用这个常量

object.delay(queue: QUEUES[:mailers]).do_something
Run Code Online (Sandbox Code Playgroud)

并尝试动态地构建delayed_job_args

system("RAILS_ENV=production script/delayed_job --pool=super_slow_stuff --pool:#{(QUEUES.values-[super_slow_stuff]).join(',')}:number_of_workers start")
Run Code Online (Sandbox Code Playgroud)