如何将 Sidekiq 作业添加到队列开头?

问题描述 投票:0回答:1

如何将 Sidekiq 作业添加到队列开头?

我知道您现在可能想说的最明显的事情是“只需添加一个单独的高优先级队列,以及一个单独的工作人员!”,但我的资源有限,所以额外的工作人员是不可能的。

现在,我知道从技术上来说,Sidekiq 正在将作业预先添加到 Redis 中的队列中,然后 从列表末尾弹出它们以获取下一个作业进行处理(这有点违反直觉,但没关系)。有时,为了在终止时保留未完成的作业,它实际上做了我需要的事情:它将作业重新排队到列表的末尾(==接下来将拉出它们)。那么,最后,有人知道如何将作业添加到队列中(好吧,从技术上讲,它是“追加”),以便下次获取时执行它?当然,无需对 Sidekiq 源代码进行过多的猴子修补。或者,也许有人知道已经可以做到这一点的宝石?..

ruby sidekiq
1个回答
0
投票
我的资源有限,因此不可能额外雇用一名工人。

您不需要额外的工作人员,您只需配置第二个队列即可。即使是具有单个线程的单个 Sidekiq 进程也可以处理多个队列。

Sidekiq 队列按照给定的顺序进行处理(或按权重,请参阅

高级选项 – 队列

)。 鉴于这个简单的配置:

:queues: - critical - default

可用的 Sidekiq 工作人员将首先尝试从 
critical

队列中获取作业,如果队列为空,则其次从

default
队列中获取作业。
假设您在 

default

队列中有 3 个作业,而

critical
 中没有
critical: [] default: [job_1, job_2, job_3]

...下一个可用的工作人员将首先处理 
job_1

,然后是

job_2
,最后是
job_3
如果您将另一项工作推送到

critical

,即:

critical: [job_4]
 default: [job_1, job_2, job_3]

...下一个可用的工作人员将首先处理 
job_4

,然后处理

job_1
job_2
job_3
    

© www.soinside.com 2019 - 2024. All rights reserved.