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

ker*_*lin 15 ruby-on-rails redis sidekiq

使用控制台,如何判断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
Run Code Online (Sandbox Code Playgroud)

ilt*_*mpo 27

您可以使用Sidekiq提供的Redis信息:

redis_info = Sidekiq.redis { |conn| conn.info }
redis_info['connected_clients'] # => "16"
Run Code Online (Sandbox Code Playgroud)

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

  • 如果没有redis连接或服务器可用,那么`conn.info`会引发异常`Redis :: CannotConnectError` (6认同)

Mik*_*ham 9

听起来你想知道是否有一个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
Run Code Online (Sandbox Code Playgroud)

Sidekiq :: ProcessSet为您提供有关任何正在运行的Sidekiq流程的几乎实时(每5秒更新一次)信息.


ove*_*uka 7

我把这个方法设为Rails whit it obove answer,true如果连接false则返回,如果不连接则返回.

  def redis_connected?
    !!Sidekiq.redis(&:info) rescue false
  end
Run Code Online (Sandbox Code Playgroud)