- 新增 4 个定时任务类: - ObjectSyncTask: 对象自动同步任务 - ObjectInsertTask: 对象自动插入任务 - ObjectUpdateTask: 对象自动更新任务 - MetadataChangeAutoSyncTask: 元数据变更自动同步任务 - 新增 2 个多对象操作接口: - insertMultipleObjectDataToTarget: 批量插入对象数据到目标系统 - updateMultipleObjectDataToTarget: 批量更新对象数据到目标系统 - 新增完整的定时任务文档: - task/index.md: 定时任务文档索引 - ObjectSyncTask.md: 对象自动同步任务文档 - ObjectInsertTask.md: 对象自动插入任务文档 - ObjectUpdateTask.md: 对象自动更新任务文档 - MetadataChangeAutoSyncTask.md: 元数据变更自动同步任务文档 - RateLimitResetTask.md: 每日限流重置任务文档 - 新增 API 文档索引:api-docs/index.md - 更新唯一真源文档中心:docs/index.md - 新增完整的项目文档: - REQ-005.md: 定时任务自动同步、插入和更新对象数据需求 - REQ-006.md: 元数据变更自动同步本地数据库需求 - 0005-scheduled-tasks-implementation.md: 定时任务架构决策 - 0006-metadata-change-auto-sync.md: 元数据变更自动同步架构决策 - 005-scheduled-tasks-implementation.md: 定时任务实现提示词 - 006-metadata-change-auto-sync.md: 元数据变更自动同步实现提示词 - 20260116-scheduled-tasks-implementation.md: 定时任务实现会话记录 - 20260116-metadata-change-auto-sync.md: 元数据变更自动同步实现会话记录 - 20260116-scheduled-tasks-implementation-retro.md: 定时任务实现复盘 - 20260116-metadata-change-auto-sync-retro.md: 元数据变更自动同步实现复盘 - 0015-scheduled-tasks-implementation.md: 定时任务变更记录 - 0016-metadata-change-auto-sync.md: 元数据变更自动同步变更记录 - 更新 CHANGELOG.md 和 README.md
5.4 KiB
5.4 KiB
RateLimitResetTask - 每日限流重置任务
任务信息
- 任务名称: RateLimitResetTask
- Bean 名称: rateLimitResetTask
- 类路径:
com.datai.integration.task.RateLimitResetTask - 执行方法:
resetDailyRateLimits() - 模块归属: Salesforce 集成 - 定时任务
- 创建日期: 2026-01-16
- 最后更新: 2026-01-16
功能描述
重置所有每日限流配置的使用量、剩余值和重置时间。该任务负责在每天凌晨自动重置所有每日限流配置,确保第二天可以正常使用 API 配额。
执行条件
无条件执行(每日定时执行)。
执行流程
开始
↓
查询所有每日限流配置(limitType = "Daily")
↓
遍历每个限流配置
↓
如果当前被阻止(isBlocked = true),解除阻止状态
↓
重置使用量为0
↓
重置剩余值为最大限制值
↓
更新重置时间为明天0点
↓
更新数据库
↓
继续下一个限流配置
↓
输出统计信息
↓
结束
执行结果统计
任务执行完成后,会输出以下统计信息:
| 统计项 | 描述 |
|---|---|
| 重置记录数 | 成功重置的限流配置记录数量 |
日志输出
INFO 级别
开始执行每日限流重置任务
每日限流重置任务完成,共重置 10 条记录
ERROR 级别
执行每日限流重置任务失败
异常处理
任务级别异常
- 捕获所有异常,记录错误日志
- 任务执行失败时,所有限流配置都不会被重置
- 需要手动检查和修复
重置逻辑
重置的字段
| 字段名 | 重置前 | 重置后 | 说明 |
|---|---|---|---|
| isBlocked | true/false | false | 解除阻止状态 |
| currentUsage | 任意值 | 0 | 重置使用量为0 |
| remainingVal | 任意值 | maxLimit | 重置剩余值为最大限制值 |
| resetTime | 任意时间 | 明天0点 | 更新下一次重置时间 |
重置时间计算
LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0)
示例:
- 当前时间:2026-01-16 23:59:59
- 重置时间:2026-01-17 00:00:00
配置示例
Quartz 任务配置
INSERT INTO sys_job (job_name, job_group, invoke_target, cron_expression, status, remark)
VALUES (
'每日限流重置任务',
'DEFAULT',
'rateLimitResetTask.resetDailyRateLimits',
'0 0 0 * * ?',
'0',
'每天凌晨0点执行每日限流重置任务'
);
Cron 表达式说明
| 字段 | 值 | 说明 |
|---|---|---|
| 秒 | 0 | 第0秒 |
| 分 | 0 | 第0分 |
| 时 | 0 | 凌晨0点 |
| 日 | * | 每天 |
| 月 | * | 每月 |
| 周 | ? | 不指定 |
注意事项
-
执行时间建议
- 建议在每天凌晨0点执行
- 确保在新的一天开始时重置所有限流配置
- 避免在其他时间执行,以免影响业务
-
限流配置要求
- 确保限流配置的
limitType字段为 "Daily" - 确保限流配置的
maxLimit字段不为空 - 确保限流配置的
maxLimit字段大于0
- 确保限流配置的
-
重置时机
- 任务执行后,所有每日限流配置的使用量都会被重置为0
- 剩余值会被重置为最大限制值
- 下一次重置时间会被设置为明天0点
-
阻止状态处理
- 如果限流配置当前被阻止(isBlocked = true),任务会自动解除阻止状态
- 解除阻止状态后,API 调用可以正常进行
- 如果限流配置没有被阻止,isBlocked 字段保持不变
-
数据一致性
- 任务执行前,确保所有限流配置的数据完整
- 任务执行后,检查重置结果是否正确
- 如果任务执行失败,需要手动重置限流配置
-
监控和告警
- 建议监控任务执行状态
- 如果任务执行失败,及时告警
- 定期检查限流配置的重置时间是否正确
相关接口
- 导出限流配置列表 - 导出限流配置列表
相关文档
无(该任务为系统维护任务,无专门的需求文档和架构决策)
测试信息
测试环境
- 环境: 开发环境
- 版本: v1.0
测试用例
| 测试场景 | 输入参数 | 预期结果 | 实际结果 | 状态 |
|---|---|---|---|---|
| 正常重置 | 无配置 | 成功重置所有每日限流配置 | 成功重置所有每日限流配置 | 通过 |
| 重置被阻止的配置 | isBlocked = true | 解除阻止状态,重置使用量和剩余值 | 解除阻止状态,重置使用量和剩余值 | 通过 |
| 重置未阻止的配置 | isBlocked = false | 重置使用量和剩余值,保持阻止状态不变 | 重置使用量和剩余值,保持阻止状态不变 | 通过 |
| 重置时间为明天0点 | 当前时间为任意时间 | 重置时间设置为明天0点 | 重置时间设置为明天0点 | 通过 |
| 无每日限流配置 | limitType != "Daily" | 不处理该配置 | 不处理该配置 | 通过 |
实现细节
- 使用
@Component("rateLimitResetTask")注解注册为 Spring Bean - 使用
@Slf4j注解进行日志记录 - 使用
@Autowired注入IDataiIntegrationRateLimitService - 查询所有每日限流配置(limitType = "Daily")
- 遍历每个限流配置,执行重置操作
- 如果当前被阻止,解除阻止状态
- 重置使用量为0,剩余值为最大限制值
- 更新重置时间为明天0点
- 更新数据库
- 记录详细的日志信息,便于问题排查