安排作业以在可配置的时间内执行操作

问题描述

达到可配置的阈值后,我必须执行一些操作。让我解释一下这种情况:

假设我在数据库中进行以下配置:

Time      Action 
---------------
5 min      A1
10 min     A2
20 min     A3

我现在必须安排一项工作(可能在sidekiq中),以便:

At 5th min - action A1 is triggered
At 10th min - action A2 is triggered
At 20th min - action A3 is triggered
Reset the timer
At 25th min - action A1 is triggered
so on..

我知道我应该描述自己所做的努力,但是我现在一无所知,需要一个指导来实现这一目标。

解决方法

没有某种形式的JobQueue宝石。

objects = IterableTimeObject.all

while(some_condition)
   objects.each do |obj|
       sleep(obj.time*60)
       Call_Some_Task
   end
end

使用Delayed::Job

objects = IterableTimeObject.all
max_minute = objects.map{|obj| obj.time}.max

while(some_condition)
   objects.each do |obj|
      PerformSomeJob.set(wait: 
          obj.time*60.seconds).perform_later(params1,params2)
   end
   sleep(max_minute*60)
end

请注意,时间是对象上的分钟数。 obj.time*60实际上给出了执行作业之前要等待的秒数。 在最长的几分钟内放松该过程,然后再次恢复。 希望这会有所帮助。