目前正在使用 sidekiq 运行我的后台作业。一次同时运行 10 个作业。这些工作不是小工作。完成这项工作需要 6-8 个小时。
与此同时,我需要运行一些较小的作业(需要 2-3 分钟)。目前我无法运行这些作业,直到上述 10 个作业中的任何一个完成。所以我需要等待 6-8 个小时才能完成这个小工作。
但是这些作业应该在添加到队列后立即运行。是否有任何选项可以阻止任何一个进程来运行这种小型作业。我尝试了队列选项,但它在我的场景中也不起作用。
这是我的sidekiq配置
:concurrency: 10
:queues:
- [web, 7]
- [default, 3]
谁能给我这个问题的解决方案?
最佳答案
长作业会扼杀较小的作业,因为它们争夺相同的资源。
我可以建议您运行两个 sidekiq 进程,每个进程使用不同的配置文件,并且每个监听不同的队列:
sidekiq_long.yml
:
:concurrency: 10
:queues:
- default
sidekiq_normal.yml
:
:concurrency: 3
:queues:
- web
这样一个 sidekiq 进程将始终可用于服务器短作业:
sidekiq -C config/sidekiq_long.yml.yml
sidekiq -C config/sidekiq_normal.yml
关于ruby-on-rails - Sidekiq worker优先级设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22913990/