你如何重新安排 Sidekiq 的工作?

evo*_*voo 4 ruby ruby-on-rails sidekiq ruby-on-rails-4

我已经使用 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)

Mik*_*ham 6

你做这个:

Sidekiq::ScheduledSet.new.find_job(@message.jid).reschedule(1.day.from_now)
Run Code Online (Sandbox Code Playgroud)

find_job呼叫是非常缓慢的,不会扩展到许多在调度的设置作业。我建议你:

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


evo*_*voo 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])
Run Code Online (Sandbox Code Playgroud)