使用控制台,如何判断 sidekiq 是否连接到 redis 服务器?我希望能够做这样的事情:
if (sidekiq is connected to redis) # psuedo code
MrWorker.perform_async('do_work', user.id)
else
MrWorker.new.perform('do_work', user.id)
end
使用控制台,如何判断 sidekiq 是否连接到 redis 服务器?我希望能够做这样的事情:
if (sidekiq is connected to redis) # psuedo code
MrWorker.perform_async('do_work', user.id)
else
MrWorker.new.perform('do_work', user.id)
end
您可以使用 Sidekiq 提供的 Redis 信息:
redis_info = Sidekiq.redis { |conn| conn.info }
redis_info['connected_clients'] # => "16"
我将这种方法应用于 Rails 并给出了上面的答案,true
如果连接则返回,否则返回false
。
def redis_connected?
!!Sidekiq.redis(&:info) rescue false
end
听起来您想知道是否有一个 Sidekiq 进程启动并运行以在给定时间点处理作业。使用 Sidekiq 3.0,您可以这样做:
require 'sidekiq/api'
ps = Sidekiq::ProcessSet.new
if ps.size > 0
MyWorker.perform_async(1,2,3)
else
MyWorker.new.perform(1,2,3)
end
Sidekiq::ProcessSet 为您提供有关任何正在运行的 Sidekiq 进程的几乎实时(每 5 秒更新一次)信息。
跳出@overallduka 的答案,对于那些使用okcomputer gem 的人,这是我设置的自定义检查:
class SidekiqCheck < OkComputer::Check
def check
if sidekiq_accessible?
mark_message "ok"
else
mark_failure
end
end
private
def sidekiq_accessible?
begin
Sidekiq.redis { |conn| conn.info }
rescue Redis::CannotConnectError
end.present?
end
end
OkComputer::Registry.register "sidekiq", SidekiqCheck.new
begin
MrWorker.perform_async('do_work', user.id)
rescue Redis::CannotConnectError => e
MrWorker.new.perform('do_work', user.id)
end