如何在Sidekiq中重新安排作业?

5
我已经使用Sidekiq实现了定时通知。我想添加一个重新调度未执行作业的功能。我在Sidekiq API代码中看到了reschedule方法https://github.com/mperham/sidekiq/blob/061068c551bd96eb6aa790dda0a4dad85bf55381/lib/sidekiq/api.rb,但是我不确定在初始化SortedEntry类时传递什么参数。文档中没有示例,所以我想知道是否有任何关于Sidekiq重新调度的经验? 顺便说一下,当我创建一个作业时,会获取它的jid:

message_jid = MessagesWorker.perform_in(@message.deliver_at, msgs2_ids, @message.id)


可能会对你有帮助:http://stackoverflow.com/questions/25937654/sidekiq-reschedule-failed-job - amtest
2个回答

7
你需要这样做:
Sidekiq::ScheduledSet.new.find_job(@message.jid).reschedule(1.day.from_now)

find_job调用非常缓慢,不能承载大量计划任务。我建议你要么:

  1. 使用作业取消功能,参见FAQ wiki页面
  2. 使用Sidekiq Pro的高性能API扩展。

0

也许有更简单的方法来重新安排消息,但我设法做到了。我的代码:

scheduler = Sidekiq::ScheduledSet.new
job = scheduler.select {|s| s.klass == 'MessagesWorker' && s.jid == @message.jid }.first
entry = Sidekiq::SortedEntry.new(job.parent, job.score, job.item)
entry.reschedule(params[:message][:deliver_at])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接