Redis Sidekiq客户端错误处理

Redis Sidekiq客户端错误处理,redis,sidekiq,Redis,Sidekiq,我想知道是否有办法挽救redis连接错误,这样我就可以使用另一种数据存储来推送作业。我们使用客户端中间件来设置当前线程用户等,因此拯救.perform\u async不会有多大帮助。此外,客户端中间件似乎不支持错误处理。对于客户端中间件中的redis连接错误,是否有一种解决方法可以挽救?我可以想到的方法是实现redis的心跳,设置一个全局标志,将作业推送到中间件内的另一个数据存储中。感谢您的帮助。在config/initializers/sidekiq.rb中: class SidekiqErr

我想知道是否有办法挽救redis连接错误,这样我就可以使用另一种数据存储来推送作业。我们使用客户端中间件来设置当前线程用户等,因此拯救.perform\u async不会有多大帮助。此外,客户端中间件似乎不支持错误处理。对于客户端中间件中的redis连接错误,是否有一种解决方法可以挽救?我可以想到的方法是实现redis的心跳,设置一个全局标志,将作业推送到中间件内的另一个数据存储中。感谢您的帮助。

在config/initializers/sidekiq.rb中:

class SidekiqErrorHandler
  def call(worker_class, job, queue, redis_pool)
    begin
      Sidekiq.redis {|conn| conn.ping}
      yield
    rescue
      klass = worker_class.constantize
      klass.new.perform(*(job['args']))
      false
    end
  end
end
constantize在Rails 4应用程序中是不必要的,但最近我发现Rails 5应用程序中需要它

Sidekiq.configure_client do |config|
  config.redis = { :size => 1 }
  config.client_middleware { |chain| chain.add SidekiqErrorHandler } unless Rails.env.test?
end
这也很方便(在同一个文件中):

这允许sidekiq作业在线运行,以便在本地轻松调试

if Rails.env.development?
  require 'sidekiq/testing'
  Sidekiq::Testing.inline!
end