【问题标题】:How do you go about rescheduling a job in Sidekiq?您如何重新安排 Sidekiq 的工作?
【发布时间】:2015-01-22 12:19:55
【问题描述】:

我已经使用 Sidekiq 实现了预定通知。我还想添加重新安排尚未运行的作业的功能。我确实在 sidekiq api 代码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)

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-4 sidekiq


【解决方案1】:

你这样做:

Sidekiq::ScheduledSet.new.find_job(@message.jid).reschedule(1.day.from_now)

find_job 调用非常慢,无法扩展到计划集中的大量作业。我建议你:

  1. 使用作业取消,如 FAQ wiki page 中所述。
  2. 使用 Sidekiq Pro 的高性能 API 扩展。

【讨论】:

    【解决方案2】:

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

    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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多