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
默认情况下,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
我想更改整个应用程序的这些默认值。不要将覆盖添加到每个 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