延迟工作一名工人完成一项任务(同步呼叫)

时间:2018-07-19 10:29:52

标签: ruby-on-rails ruby delayed-job

我有20 Delayed job workers

我搜索了很多链接,并发布了该工作的synchronous处理信息,但对我没有任何作用

还为这样的垂直QUEUE分配worker

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

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

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

请提出建议在这种情况下工作,一种方法一次只调用一名工人。

先谢谢了。

2 个答案:

答案 0 :(得分:0)

根据DJ documentation

  

在未指定队列的情况下启动的进程将运行任何队列中的作业。

您应该使用明确的队列名称运行工作程序: RAILS_ENV=production script/delayed_job --queue=tracking start

以及所有其他(“默认”)工作程序的其他队列名称。 要定义该名称,请在初始化程序中设置Delayed::Worker.default_queue_name

答案 1 :(得分:0)

我可以通过这种方式解决

将下一个相同的工作分配给另一个工作人员时,我们可以提前一秒钟添加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