目前正在使用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工作人员优先级设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22913990/