延迟工作一个工作人员完成一项任务(同步调用)

Delayed Job One worker for one task (synchronous call)

我有20 Delayed job workers

我搜索了很多链接和 post 以 synchronous 处理那份工作,但对我来说没有用

也像这样为特定的worker分配QUEUE

script/delayed_job --queue=order_item_kit start -i 0

order.delay(:queue => "order_item_kit").update_order 但这将分配给这个队列,其他工作人员也为它工作。

我正在搜索 one worker 一次 运行 one job。 对于这种特殊情况

这种情况请给个工作建议,一个方法一次只调用一个worker。

提前致谢。

根据 DJ documentation

Processes started without specifying a queue will run jobs from any queue.

您应该 运行 您的工作人员具有明确的队列名称: RAILS_ENV=production script/delayed_job --queue=tracking start

以及所有其他 ('default') 工作人员的其他队列名称。 要在初始化程序中定义该名称集 Delayed::Worker.default_queue_name

我可以这样解决

当它将下一个相同的工作分配给另一个工人时,我们可以提前一秒添加 run_at,因此 multiple workers 不会同时保存对象,这解决了我们的问题

latest_job = Delayed::Job.where(queue: "order_item_kit").last

run_at = latest_job ? latest_job.run_at + 1.seconds : 1.seconds.from_now

kit_sku.delay(:run_at => run_at,:queue =>"order_item_kit").update_ordere_item