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