我有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
。
对于这种特殊情况
请提出建议在这种情况下工作,一种方法一次只调用一名工人。
先谢谢了。
答案 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