0

似乎我的工作失败了,但是当它失败时它仍然存在,然后创建另一个与它自己相同的工作。请注意,在我的屏幕截图中,顶部项目和底部项目是相同的,参数“836898”。这是我需要更改的某种配置吗?

我指的是出现的重复条目,不一定禁用重试。

参数 836898 失败

4

3 回答 3

1

我认为你应该首先包括gem 'sidekiq-unique-jobs'

那么你的工人应该是这样的

class CleanupWorker
  include Sidekiq::Worker
  sidekiq_options queue: :cleanup, unique: :until_executed, retry: 4, failures: :exhausted, backtrace: true

  sidekiq_retry_in do |count|
    10 * (count + 1)
  end

  def perform(args)
  end
end

unique: :until_executed这意味着作业必须是唯一的,只要它仍在队列中或正在执行。retries: 4和之间的组合unique: :until_executed可以解决问题。因为据我所知,如果重试不为假,那么作业何时崩溃,那么作业将返回队列。

这是这个独特的工作宝石回购的链接

于 2017-09-20T20:57:59.610 回答
0

Retries 中有两个条目,因为它们是两个不同的作业。您可以创建仅在内部作业 ID 不同的“相同”作业(具有相同的类和参数)。

于 2017-09-21T02:53:15.537 回答
0

NickM 的回答是正确的。但是,它将禁用所有 sidekiq 工作人员的重试。根据每种情况,我建议在每个类中禁用它,例如:

class NonRetryableWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform
  end
end

或者,也许只是限制重试次数,例如:

class LessRetryableWorker
  include Sidekiq::Worker
  sidekiq_options retry: 5

  def perform
  end
end

你可以在这里查看更多信息

于 2017-09-20T17:36:35.323 回答