Sidekiq:为所有工作人员配置指数退避

Sidekiq: configure exponential backoff for all workers

默认情况下,Sidekiq 将使用指数退避重试作业 25 次,我正在尝试更改所有工作人员的默认重试计数和默认指数退避的配置。

我看到您可以使用

在 class 级别更改它们

sidekiq_options :重试

sidekiq_retry_in

class WorkerWithCustomRetry
  include Sidekiq::Worker
  sidekiq_options :retry => 5

  sidekiq_retry_in do |count|
    10 * (count + 1) # (i.e. 10, 20, 30, 40)
  end

  def perform(...)
  end
end

我想更改整个应用程序的这些默认值。不要将覆盖添加到每个 class。 我发现了如何使用

更改默认的最大重试次数
Sidekiq.configure_server do |config|
  config.server_middleware do |chain|
    chain.add Sidekiq::Middleware::Server::RetryJobs, :max_retries => 5
  end
end

但是我找不到任何关于如何全局更改指数退避的示例。
这可能吗?如果可能的话如何?

谢谢

中间件配置不支持。

两种选择。一种是扩展 Server::RetryJobs 中间件并在那里覆盖 def seconds_to_delay。然后使用您自定义的中间件,而不是开箱即用的 Server::RetryJobs

另一种解决方案是让您的所有工作人员都包含 WorkerWithCustomRetry 而不是 Sidekiq::Worker。基本上,围绕 Sidekiq 默认工作程序制作一个仅适用于您的应用程序的包装器。我更喜欢第二个选项,因为它与 Sidekiq 的 public 接口一起工作,而不是从中间件重新定义 private 方法,后者可能随时更改,恕不另行通知。

在您的初始化程序中更改此设置,例如:

Sidekiq::DEFAULT_WORKER_OPTIONS['retry'] = 5

https://github.com/mperham/sidekiq/blob/master/lib/sidekiq.rb#L36