如何判断sidekiq是否连接到redis服务器?

使用控制台,如何判断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" 

从Sidekiq的Sinatra状态应用程序中取出它。

听起来您想知道是否有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秒更新一次)信息。

我将此方法设为Rails whit it obove answer,如果连接则返回true否则返回false

  def redis_connected? !!Sidekiq.redis(&:info) rescue false end 

跳出@ 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