如何检查sidekiq是否已启动?

Hel*_*rld 5 ruby-on-rails ruby-on-rails-3 sidekiq

我将Sidekiq宝石与Rails 3一起使用。有没有办法查看sidekiq工人是否准备处理工作?我们要确保东西不只是被排队和坐在那里。我尝试过这样的事情...

stats = Sidekiq::Stats.new
puts stats.queues
Run Code Online (Sandbox Code Playgroud)

但这将始终返回default => 0,即使redis已启动,即使sidekiq尚未准备好处理作业也是如此。

Win*_*eld 5

您可以访问 Sidekiq WorkersAPI 来访问活动的工作人员集:

worker_api = Sidekiq::Workers.new
worker_api.size
 => 1
worker_api.each {|worker| do_stuf(worker) }
Run Code Online (Sandbox Code Playgroud)

最简单的解决方案是访问 API 并等待,直到预期数量的工作进程通过sizeWorker API 的属性启动并运行。

  • 请注意,您首先需要“require sidekiq/api”才能访问“Sidekiq::Workers”。我还建议 `Sidekiq::ProcessSet.new.size` 对于判断 Sidekiq 是否已启动更有用,因为 `Sidekiq::Workers` 仅指当前正在运行的作业,而不是指 Sidekiq 本身是否只是在监听。 (3认同)

pok*_*kyy 5

首先,您的工作进程应该正在运行。检查这个:

ps = Sidekiq::ProcessSet.new
ps.size # => 2
ps.each do |process|
  p process['busy']     # => 3
  p process['hostname'] # => 'myhost.local'
  p process['pid']      # => 16131
end
ps.each(&:quiet!) # equivalent to the USR1 signal
ps.each(&:stop!) # equivalent to the TERM signal
Run Code Online (Sandbox Code Playgroud)

来自https://github.com/mperham/sidekiq/wiki/API#processes

所以如果他们这样做 - 你可以排队更多的工作。当您的工作进程正在工作时,任务可以保留在队列中的唯一情况是当工作进程处理作业的速度比它们进来的速度慢时。然后您的队列将增长,并且在所有先前的作业完成之前不会处理新入队的任务。但是,您有责任弄清楚为什么您的员工表现缓慢。

希望有帮助!