我正在使用Rails 3的Sidekiq Gem。是否有一种方法可以查看sidekiq工人是否准备好处理工作?我们想要确保的是,这些东西不只是排着队坐在那里。我试过这样做…
stats = Sidekiq::Stats.new
puts stats.queues
但是,如果redis是up的,即使sidekiq还没有准备好处理作业,也将始终返回default => 0。
您可以访问Sidekiq Workers
API来访问活动的工作器集:
worker_api = Sidekiq::Workers.new
worker_api.size
=> 1
worker_api.each {|worker| do_stuf(worker) }
最简单的解决方案是访问API并等待,直到预期数量的工作进程通过worker API的size
属性启动并运行。
首先,您的工作进程应该正在运行。检查:
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
从https://github.com/mperham/sidekiq/wiki/API流程所以如果他们这样做,你可以排队更多的工作。当工作进程工作时,任务可以留在队列中的唯一情况是,工作进程处理任务的速度比它们进入的速度慢。然后,您的队列将增长,并且在之前的所有作业完成之前不会处理新进入队列的任务。但这是你的责任,找出为什么你的员工表现缓慢。
希望有帮助!
对于我自己,我更喜欢在控制台中运行以下命令(无论是在我的服务器上还是在本地):
ps -ef | grep "sidekiq"