Ruby on rails 具有最大执行频率的Rails activrecord作业队列
我有一个ActiveRecord模型: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点开始)。执行顺
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。出现错误时重新启动作业(重新获取所有后续作业?)