我有 ActiveRecord 模型:
User(id,user_specific_attributes, last_check:datetime, check_priority:integer, today_api_calls:integer)
我每天为每个 API 调用User
一次。API 有一些重要的限制:
- 从早上 4 点到晚上 8 点都可以使用
- 调用频率限制:每分钟 10 次 = 6 秒超时
- 通话次数限制:3000/天
我需要每天跑get_some_data_from_api()
一次User
(从凌晨 4 点开始)。执行顺序由check_priority
列定义。如果出现错误,get_some_data_from_api()
应在 6 秒后重新启动作业(api 限制)。
有适合这种情况的宝石吗?
Sidekiq、Delayed Job、Resque 等宝石不适合。使用它们,我需要在特定时间排队所有作业。考虑:
- 添加具有高优先级的新作业(重新排队所有下一个作业?)
- 作业执行可能需要 6 秒以上
- 出现错误时重新启动作业(重新排队所有下一个作业?)