Redis bağlantı hatalarını kurtarmanın bir yolu olup olmadığını bilmek istiyorum, böylece işleri zorlamak için alternatif bir veri deposu kullanabilirim. Geçerli iş parçacığı kullanıcısını ayarlamak için istemci taraf ara katman yazılımını kullanıyoruz, bu nedenle kurtarmaya .perform_async çok fazla yardımcı olmaz. Ayrıca, istemci tarafı aracı yazılımı hata işlemeyi desteklemiyor gibi görünüyor. Bir şekilde istemci middleware içinde redis bağlantı hataları için kurtarma olabilir bir geçici çözüm var mı? Düşünebildiğim yaklaşım, redis için bir kalp atışı uygulamaktı, işlerini middleware içindeki alternatif bir veri deposuna itmek için küresel bir bayrak kurdu. Herhangi bir yardım takdir edilir. config/başlatıcıları/sidekiq.rb içindeSidekiq İstemci hata yönetimi
0
A
cevap
0
:
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 app gereksiz, ama son zamanlarda bir Raylar 5 app ihtiyaç vardı buldum.
Sidekiq.configure_client do |config|
config.redis = { :size => 1 }
config.client_middleware { |chain| chain.add SidekiqErrorHandler } unless Rails.env.test?
end
Bu (aynı dosyada) da kullanışlıdır:
if Rails.env.development?
require 'sidekiq/testing'
Sidekiq::Testing.inline!
end
Bu sidekiq işleri yerel olarak kolay hata ayıklama için izin vermek, in-line çalışmasını sağlar.