17

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

5 回答 5

35

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

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

Sidekiq 的 Sinatra 状态应用程序中获取。

于 2013-04-06T07:32:55.147 回答
12

我将这种方法应用于 Rails 并给出了上面的答案,true如果连接则返回,否则返回false

  def redis_connected?
    !!Sidekiq.redis(&:info) rescue false
  end
于 2014-05-17T18:04:38.763 回答
10

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

于 2014-05-18T22:06:45.123 回答
3

跳出@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
于 2015-04-02T16:15:28.473 回答
1
begin
  MrWorker.perform_async('do_work', user.id)
rescue Redis::CannotConnectError => e
  MrWorker.new.perform('do_work', user.id)
end
于 2015-03-26T15:13:49.210 回答