Ruby on rails 延迟的作业队列、优先级、工作进程

Ruby on rails 延迟的作业队列、优先级、工作进程,ruby-on-rails,delayed-job,Ruby On Rails,Delayed Job,我的代码中大约有10个队列,每个队列都有单独的工作人员。所有都有默认优先级-1 目前,来自用户(UI)和rake任务的请求在同一队列中。假设,从用户和rake任务中获取数据的请求进入优先级为1的同一队列&这两个请求都逐个执行,具体取决于请求时间 但是我想先运行来自用户的请求&然后是rake任务。我该怎么办 我还想了解,如果我为rake任务创建了一个单独的队列,并赋予它低优先级,那么它将如何工作。它将与其他队列一起运行还是等待它们首先执行 Delayed::Worker.queue_attribu

我的代码中大约有10个队列,每个队列都有单独的工作人员。所有都有默认优先级-1

目前,来自用户(UI)和rake任务的请求在同一队列中。假设,从用户和rake任务中获取数据的请求进入优先级为1的同一队列&这两个请求都逐个执行,具体取决于请求时间

但是我想先运行来自用户的请求&然后是rake任务。我该怎么办

我还想了解,如果我为rake任务创建了一个单独的队列,并赋予它低优先级,那么它将如何工作。它将与其他队列一起运行还是等待它们首先执行

Delayed::Worker.queue_attributes = {
  high_priority: { priority: -10 },
  low_priority: { priority: 10 }
}

本文可以进一步帮助您—它还提供了一些代码示例,您可以使用这些示例尝试使用自己的代码:

基本上,如果您想首先运行来自用户的请求,您应该为他们创建一个队列并为其分配更高的优先级。无需指定-10,只需从0开始,然后逐步向上

但也要记住,您不应该有超过几个队列,因此将不同的优先级捆绑在一起可能是有意义的:

我建议排队的人不要超过几个。大量队列使得系统更加复杂,Sidekiq Pro无法在没有轮询的情况下可靠地处理多个队列。M Sidekiq Pro进程轮询N个队列意味着每秒有O(M*N)个操作砰击Redis


最后,如果代码的一部分必须在另一部分之前运行,您还可以将rake任务从处理用户请求的作业中排队。

本文可以进一步帮助您-它还提供了一些代码示例,您可以使用这些示例来尝试自己的代码:

基本上,如果您想首先运行来自用户的请求,您应该为他们创建一个队列并为其分配更高的优先级。无需指定-10,只需从0开始,然后逐步向上

但也要记住,您不应该有超过几个队列,因此将不同的优先级捆绑在一起可能是有意义的:

我建议排队的人不要超过几个。大量队列使得系统更加复杂,Sidekiq Pro无法在没有轮询的情况下可靠地处理多个队列。M Sidekiq Pro进程轮询N个队列意味着每秒有O(M*N)个操作砰击Redis


最后,如果代码的一部分必须在另一部分之前运行,您还可以将rake任务从处理用户请求的作业中排队。

您还可以共享作业排队的代码吗?您还可以共享作业排队的代码吗?但这是针对sidekiq队列的,我正在寻找延迟的工作库,但这是为sidekiq队列,我正在寻找延迟的工作库