在其中检索 Sidekiq 工作人员的计划日期



让我们让很多作业排队等待某个日期my_date

同一天的工作太多了,以至于他们中的一些人在scheduled_date后仅工作了 20 分钟。

进入perform方法后,如何检索此计划日期?

ps :我不能将此scheduled_date作为参数传递,因为它是 Cron 作业(我只能传递静态参数(

PS2 : GitHub 问题 https://github.com/mperham/sidekiq/issues/3945

编辑:目前这是一个部分答案,仍然不令人满意(例如,重试不起作用(:

# wait for Sidekiq::Workers to be updated (5 sec)
sleep 8
the_exact_date = Time.at(Sidekiq::Workers.new.find { |_, __, w| w["payload"]["jid"] == jid }[2]["run_at"])

编辑2:当前Sidekiq Cron的PR,完全解决了我的问题:https://github.com/ondrejbartas/sidekiq-cron/pulls

似乎有一个enqueued_at强制性的参数传递给工作,我相信这正是您正在寻找的。

如果要查找作业启动的时间,则只需在 execute 方法的开头Time.current

有关官方文档,请参阅https://github.com/mperham/sidekiq/wiki/Job-Format#job

如果你使用的是 Sidekiq-cron :

我提交了 PR 并被接受。解决方案是在初始化 sidekiq-cron 作业时使用可选的date_as_argument参数:

https://github.com/ondrejbartas/sidekiq-cron#getting-started

最新更新