Ruby on rails 具有最大执行频率的Rails activrecord作业队列

Ruby on rails 具有最大执行频率的Rails activrecord作业队列,ruby-on-rails,job-scheduling,Ruby On Rails,Job Scheduling,我有一个ActiveRecord模型: User(id,user_specific_attributes, last_check:datetime, check_priority:integer, today_api_calls:integer) 我每天为每个用户执行一次API调用。API有一些重要的限制: 从早上4点到晚上8点可以到达 呼叫频率限制:每分钟10次=6秒超时 通话次数上限:3000/天 我需要每天为每个用户运行一次从\u api()获取一些\u数据(从凌晨4点开始)。执行顺

我有一个ActiveRecord模型:

User(id,user_specific_attributes, last_check:datetime, check_priority:integer, today_api_calls:integer)
我每天为每个
用户执行一次API调用。API有一些重要的限制:

  • 从早上4点到晚上8点可以到达
  • 呼叫频率限制:每分钟10次=6秒超时
  • 通话次数上限:3000/天
我需要每天为每个
用户
运行一次
从\u api()获取一些\u数据(从凌晨4点开始)。执行顺序由
check\u priority
列定义。 如果
从\u api()获取\u一些\u数据时出错,则应在6秒后重新启动作业(api限制)

有适合这种情况的宝石吗

像Sidekiq、延迟工作、Resque这样的宝石是不合适的。使用它们,我需要将所有作业按特定时间排队。考虑:

  • 添加具有高优先级的新作业(重新获取所有后续作业?)
  • 作业执行可能需要6秒钟以上
  • 出现错误时重新启动作业(重新获取所有后续作业?)
  • 这也行。它可以选择在特定时间运行,并在作业失败时重新安排

    DJ作为应用程序的单独实例运行。您可以为作业分配优先级。执行时间无关紧要。它具有内置选项,用于配置失败时重试

    为了在特定的时间安排作业并重新安排它们,我使用了自永存作业。因此,工作完成后,它会重新安排自己。差不多

    def run_me
      ///code code
       User.delayed_job(:run_at => next_day).run_me
    end
    

    您可以用同样的方法处理某些错误。例如,如果api限制被超过,您可能希望捕获一些异常并在第二天重新安排,而不是6秒

    是的,但使用DJ,我需要将所有作业按特定时间排队。考虑:1。添加具有高优先级的新作业(重新获取所有后续作业?)2。作业执行可能需要6秒以上3。出现错误时重新启动作业(重新获取所有后续作业?)