sidekiq文档显示我只能控制Sidekiq的全局并发,而不是每个队列。我在这里提出一个问题,希望每个队列的并发设置都有解决方案。一些第三方服务就是不接受高并发性,并且仅仅为了这些限制整个侧边站是痛苦的。
我在sidekiq 3.3上
发布于 2016-08-11 04:30:45
使用Heroku,我可以通过在Procfile中设置环境变量,然后在sidekiq.rb初始化器中使用它来控制每个队列的并发性:
Sidekiq.configure_server do |config|
config.options[:concurrency] = (ENV['SIDEKIQ_WORKERS_PROCFILE'] || ENV['SIDEKIQ_WORKERS'] || 1).to_i
...
end在Procfile中为一个队列设置SIDEKIQ_WORKERS_PROCFILE -其他队列使用在Heroku设置中设置的SIDEKIQ_WORKERS。
不过,我不确定这在您的场景中是否有任何帮助。
更新
为了澄清这一点,这个想法涉及到在Heroku上的部署,每个队列都在一个单独的dyno中处理。这使得它仍然使用全局sidekiq并发设置,dynos只是在我的用例中完成工作的一种变通方法。
我的Procfile看起来像这样:
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
default: env HEROKU_PROCESS=default bundle exec sidekiq -c 5
important: env HEROKU_PROCESS=important bundle exec sidekiq -q important -c 5
instant: env HEROKU_PROCESS=instant bundle exec sidekiq -q instant -c 5
matrices: env HEROKU_PROCESS=matrices SIDEKIQ_WORKERS_PROCFILE=1 bundle exec sidekiq -q matrices -c 1您可以看到,matrices工作线程将SIDEKIQ_WORKERS_PROCFILE变量设置为1-这使得运行具有不同并发性的队列的工作线程成为可能。该变量由sidekiq.rb初始化器读取。请注意,还有-c 1选项-我不知道这是否重要。
初始化器已经在上面了。
所有这些都设置好了,在sidekiq仪表板中,我可以看到matrices队列正在运行1个线程,而其他队列使用3个线程(在Heroku settings环境中,SIDEKIQ_WORKERS变量被设置为3。变量):

发布于 2018-06-19 05:15:37
企业版的Sidekiq增强了并发控制:
https://github.com/mperham/sidekiq/wiki/Ent-Rate-Limiting
特别是,您可以通过计数或间隔来限制任意作业的并发性。例如,一次最多20个作业;或每个(60秒/1小时等)最多20个作业。间隔可以是滚动的,也可以是时钟对齐的。
这可以用正确的用法满足您所询问的每个队列的控制。但它可以更灵活,通过您自己的分组来控制并发。例如,您可以指定最多30个作业每秒可以命中PayPal。或者,您可以指定每个州每秒30个作业可以命中Paypay,每个州可以同时命中15个作业。(当然,假设“state”是数据中的一个属性。)
您想要如何细粒度地定义您的组是没有限制的。
发布于 2021-03-12 03:42:49
我只需从yml文件中删除并发性,并在启动worker时更改它。
sidekiq.yml
:queues:
- default
- long_running我在docker环境中运行我的工人。我只需要为每个队列运行单独的工作进程:
默认worker以开头
sidekiq -q default -c 5长时间运行的worker以
sidekiq -q long_running -c 2或者,您可以使用单独的yml配置,并使用-C选项传递不同的配置
https://stackoverflow.com/questions/28792190
复制相似问题