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

时间:2016-05-04 16:59:07

标签: sidekiq

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

改变它们

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

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

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

但是我找不到任何关于如何全局改变指数退避的例子。
这是可能的,如果是这样的话?

由于

2 个答案:

答案 0 :(得分:1)

在初始值设定项中更改此内容,例如:

Sidekiq::DEFAULT_WORKER_OPTIONS['retry'] = 5

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

答案 1 :(得分:0)

中间件配置不支持。

两个选项。一种方法是扩展Server::RetryJobs中间件并覆盖def seconds_to_delay。然后使用您自定义的中间件而不是开箱即用的Server::RetryJobs

另一种解决方案是让所有员工都包含WorkerWithCustomRetry而不是Sidekiq::Worker。基本上,在适合您的应用程序的Sidekiq默认工作程序周围创建一个包装器。我稍微偏爱第二个选项,因为它适用于Sidekiq的公共接口,而不是从中间件重新定义private方法,这可能随时更改,恕不另行通知。