目前正在使用sidekiq运行我的后台作业。同时我一次运行10个工作岗位。这些工作不是一个小工作。完成工作需要6-8个小时。
与此同时,我需要运行一些较小的工作(需要2-3分钟)。目前,在完成上述10个工作中的任何一个工作之前,我无法运行这些工作。所以我需要等待6-8个小时才能完成这项小工作。
但是这些作业应该在添加到队列后立即运行。是否有任何选项可以阻止任何一个进程运行这种小型作业。我尝试了队列选项,但它在我的场景中也不起作用。
这是我的sidekiq配置
:concurrency: 10
:queues:
- [web, 7]
- [default, 3]
任何人都可以为我解决这个问题吗?
答案 0 :(得分:8)
长期工作窒息了较小的工作,因为他们争夺同样的资源。
我可以建议您运行两个 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