首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何控制每个队列的并发性?

如何控制每个队列的并发性?
EN

Stack Overflow用户
提问于 2015-03-01 17:56:27
回答 4查看 8.8K关注 0票数 15

sidekiq文档显示我只能控制Sidekiq的全局并发,而不是每个队列。我在这里提出一个问题,希望每个队列的并发设置都有解决方案。一些第三方服务就是不接受高并发性,并且仅仅为了这些限制整个侧边站是痛苦的。

我在sidekiq 3.3上

EN

回答 4

Stack Overflow用户

发布于 2016-08-11 04:30:45

使用Heroku,我可以通过在Procfile中设置环境变量,然后在sidekiq.rb初始化器中使用它来控制每个队列的并发性:

代码语言:javascript
复制
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看起来像这样:

代码语言:javascript
复制
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。变量):

票数 5
EN

Stack Overflow用户

发布于 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”是数据中的一个属性。)

您想要如何细粒度地定义您的组是没有限制的。

票数 2
EN

Stack Overflow用户

发布于 2021-03-12 03:42:49

我只需从yml文件中删除并发性,并在启动worker时更改它。

sidekiq.yml

代码语言:javascript
复制
:queues:
  - default
  - long_running

我在docker环境中运行我的工人。我只需要为每个队列运行单独的工作进程:

默认worker以开头

代码语言:javascript
复制
sidekiq -q default -c 5

长时间运行的worker以

代码语言:javascript
复制
sidekiq -q long_running -c 2

或者,您可以使用单独的yml配置,并使用-C选项传递不同的配置

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28792190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档