目前正在使用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/

10-16 03:50
查看更多