默认情况下,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
但是我找不到任何关于如何全局改变指数退避的例子。
这是可能的,如果是这样的话?
由于
答案 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
方法,这可能随时更改,恕不另行通知。