Sidekiq是否按照发送给工人的顺序执行工作?

时间:2014-03-24 15:30:25

标签: ruby-on-rails rake sidekiq worker

我有一个rake任务,它将按顺序调用另外4个rake任务:

rake:one
rake:two
rake:three
rake:four

一个,两个和三个Rake任务正在获取数据并将其添加到我的数据库中。然后rake:four将对该数据执行某些操作。但我需要确保首先完成一,二和三。每个rake任务实际上都是让Sidekiq工作人员在后台运行。在这种情况下,rake:one创建的所有工作人员是先完成,然后是rake:two等吗?

如果没有,我如何确保工人按顺序执行?

2 个答案:

答案 0 :(得分:4)

Sidekiq按创建顺序处理作业,但默认情况下它会同时处理多个作业,并且无法保证在另一个作业启动之前完成给定作业。

引自https://github.com/mperham/sidekiq/wiki/FAQ

  

如何以串行方式处理某个队列?

     

你不能,按设计。 Sidekiq专为异步处理而设计   可以孤立地完成并独立完成的工作   其他。工作将按照他们的顺序从Redis中弹出   被推了但是不能保证Job#1会完全执行   在作业#2开始之前。

     

如果您需要串行执行,您应该查看其他系统   给出那些类型的保证。

     

请注意,您可以创建专用于处理队列的Sidekiq进程   与一名工人。这将为您提供序列执行,但它是一个   破解。

     

另请注意,您可以使用sidekiq的第三方扩展来实现   那个目标。

答案 1 :(得分:0)

您只需创建一个元rake任务,其中包含正确顺序的所有任务。

或者作为一个不太常见的解决方案:将每个队列的工作人员数量减少到1: https://github.com/brainopia/sidekiq-limit_fetch#limits

并将所有作业添加到此队列