【问题标题】:Sidekiq schedule same worker to queue when doneSidekiq 在完成后安排相同的工作人员排队
【发布时间】:2014-01-20 14:19:42
【问题描述】:

我正在使用带有 Rails 3 的 Sidekiq,具有以下工人类:

class BotWorker
   include Sidekiq::Worker

   def perform(user_id)
      user = User.find(user_id)
      puts user.email

      if condition # always true for now
           BotWorker.perform_in(1.hour, user_id) # not working
      end
   end
end

我的控制器只是有

BotWorker.perform_async(user_id)

但是,在 Sidekiq 仪表板上,似乎没有安排其他工作人员。

还想指出,重复是有条件的,所以我似乎不能使用 sidetiq 或一些 sidekiq 调度扩展。

Sidekiq 还是新手,请阅读文档。我错过了什么?

【问题讨论】:

    标签: ruby-on-rails sidekiq


    【解决方案1】:

    奇怪。除了使用self.class 而不是BotWorker 之外,我做同样的事情,它可以工作。我的perform 方法没有任何论据。

    您可能希望将您的方法包装在 begin/rescue/ensure 块中,并将重新排队移动到 ensure 块中。

    如果User.find 未能找到用户,它将引发一个错误,Sidekiq 将捕获该错误并将您的作业移入重试队列。可能不是你想要的。

    【讨论】:

    • 谢谢。终于让它工作了,结果我不得不重新运行'sidekiq'。谢谢
    • 快速提问。您提到将重新排队移动到确保块中。但这是否意味着如果 User.find 失败,它会重试?如果 User.find 失败,我希望 Sidekiq 不重试。
    • @DelosChang 是的,它会的。对不起,如果这不是你的意图,不要把它放在那里!但是您仍然希望捕获任何错误,因此 Sidekiq 不会突然介入并为您重试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2017-12-21
    相关资源
    最近更新 更多