# 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点 | 更新下一次重置时间 | ### 重置时间计算 ```java LocalDateTime.now().plusDays(1).withHour(0).withMinute(0).withSecond(0) ``` 示例: - 当前时间:2026-01-16 23:59:59 - 重置时间:2026-01-17 00:00:00 ## 配置示例 ### Quartz 任务配置 ```sql 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点 | | 日 | * | 每天 | | 月 | * | 每月 | | 周 | ? | 不指定 | ## 注意事项 1. **执行时间建议** - 建议在每天凌晨0点执行 - 确保在新的一天开始时重置所有限流配置 - 避免在其他时间执行,以免影响业务 2. **限流配置要求** - 确保限流配置的 `limitType` 字段为 "Daily" - 确保限流配置的 `maxLimit` 字段不为空 - 确保限流配置的 `maxLimit` 字段大于0 3. **重置时机** - 任务执行后,所有每日限流配置的使用量都会被重置为0 - 剩余值会被重置为最大限制值 - 下一次重置时间会被设置为明天0点 4. **阻止状态处理** - 如果限流配置当前被阻止(isBlocked = true),任务会自动解除阻止状态 - 解除阻止状态后,API 调用可以正常进行 - 如果限流配置没有被阻止,isBlocked 字段保持不变 5. **数据一致性** - 任务执行前,确保所有限流配置的数据完整 - 任务执行后,检查重置结果是否正确 - 如果任务执行失败,需要手动重置限流配置 6. **监控和告警** - 建议监控任务执行状态 - 如果任务执行失败,及时告警 - 定期检查限流配置的重置时间是否正确 ## 相关接口 - [导出限流配置列表](../integration/DataiIntegrationRateLimitController/0001-export-rate-limit-list.md) - 导出限流配置列表 ## 相关文档 无(该任务为系统维护任务,无专门的需求文档和架构决策) ## 测试信息 ### 测试环境 - **环境**: 开发环境 - **版本**: v1.0 ### 测试用例 | 测试场景 | 输入参数 | 预期结果 | 实际结果 | 状态 | |----------|----------|----------|----------|------| | 正常重置 | 无配置 | 成功重置所有每日限流配置 | 成功重置所有每日限流配置 | 通过 | | 重置被阻止的配置 | isBlocked = true | 解除阻止状态,重置使用量和剩余值 | 解除阻止状态,重置使用量和剩余值 | 通过 | | 重置未阻止的配置 | isBlocked = false | 重置使用量和剩余值,保持阻止状态不变 | 重置使用量和剩余值,保持阻止状态不变 | 通过 | | 重置时间为明天0点 | 当前时间为任意时间 | 重置时间设置为明天0点 | 重置时间设置为明天0点 | 通过 | | 无每日限流配置 | limitType != "Daily" | 不处理该配置 | 不处理该配置 | 通过 | ## 实现细节 - 使用 `@Component("rateLimitResetTask")` 注解注册为 Spring Bean - 使用 `@Slf4j` 注解进行日志记录 - 使用 `@Autowired` 注入 `IDataiIntegrationRateLimitService` - 查询所有每日限流配置(limitType = "Daily") - 遍历每个限流配置,执行重置操作 - 如果当前被阻止,解除阻止状态 - 重置使用量为0,剩余值为最大限制值 - 更新重置时间为明天0点 - 更新数据库 - 记录详细的日志信息,便于问题排查