gpt4 book ai didi

redis - Sidekiq 客户端错误处理

转载 作者:IT王子 更新时间:2023-10-29 06:14:15 33 4
gpt4 key购买 nike

我想知道是否有办法解决 redis 连接错误,以便我可以使用替代数据存储来推送作业。我们使用客户端中间件来设置当前线程用户等,因此拯救 .perform_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

这也很方便(在同一个文件中):

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

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

关于redis - Sidekiq 客户端错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594132/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com