2013-04-05 4 views

ответ

21

Вы можете использовать Redis информацию, представленную Sidekiq:

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

Взял из Sidekiq's Sinatra status app.

+5

Если нет никакой связи Redis или сервер, доступный, что 'conn.info' будет вызывать исключение «Redis :: CannotConnectError' –

4

Я делаю этот метод в Rails с ответом выше, возвращает 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 
Смежные вопросы