2013-04-05 74 views
9

使用控制檯,如何判斷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 

回答

21

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

redis_info = Sidekiq.redis { |conn| conn.info } 
redis_info['connected_clients'] # => "16" 

把它從Sidekiq's Sinatra status app

+5

如果有可用的'conn.info'就再也Redis的連接或服務器引發'Redis :: CannotConnectError'異常 – 2013-05-07 18:16:28

4

我將此方法設置爲Rails白色的obove答案,如果連接則返回true,否則返回false

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

聽起來好像您想知道是否有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爲您提供幾乎實時(更新每5秒)任何運行Sidekiq進程信息。

1
begin 
    MrWorker.perform_async('do_work', user.id) 
rescue Redis::CannotConnectError => e 
    MrWorker.new.perform('do_work', user.id) 
end 
2

跳樓@ overallduka的回答,對於使用okcomputer寶石的,這是海關檢查我設置:

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 
相關問題