在开发中,它按照我的预期运行,有 5 个线程(目前由于 redis 连接限制而受到限制)它平均运行大约 5-7 个进程,这取决于工作人员是否必须做任何事情(有时工作人员会决定不工作,因为它正在处理的对象在几天前更新)
在生产中,它的行为不同。好像是400左右的连发跑,然后立马重新安排worker,稍等片刻,然后再次连发
工作人员使用 facebook api (koala gem),为此我使用 sidekiq-throttler ( https://github.com/gevans/sidekiq-throttler )
与选项
sidekiq_options throttle: { threshold: 50, period: 60.seconds , key: ->(user_id){ "facebook:#{user_id}"} }
我正在使用带有 procfile 的 heroku 和 redislabs(目前是免费计划)
web: bundle exec puma -C config/puma.rb
worker: bundle exec sidekiq -c 5
和sidekiq设置:
Sidekiq.configure_server do |config|
config.redis = { :url => "#{ENV['REDISCLOUD_URL']}", :namespace => 'sidekiq'}
config.server_middleware do |chain|
chain.add Sidekiq::Throttler, storage: :redis
end
end
Sidekiq.configure_client do |config|
config.redis = { :url => "#{ENV['REDISCLOUD_URL']}", :namespace => 'sidekiq' }
end
这是某事的已知症状吗?