延迟工作一个工作人员完成一项任务(同步调用)
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
我有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