datai-vue/doc/salesforce/task/RateLimitResetTask.md

5.4 KiB
Raw Blame History

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点
* 每天
* 每月
? 不指定

注意事项

  1. 执行时间建议

    • 建议在每天凌晨0点执行
    • 确保在新的一天开始时重置所有限流配置
    • 避免在其他时间执行,以免影响业务
  2. 限流配置要求

    • 确保限流配置的 limitType 字段为 "Daily"
    • 确保限流配置的 maxLimit 字段不为空
    • 确保限流配置的 maxLimit 字段大于0
  3. 重置时机

    • 任务执行后所有每日限流配置的使用量都会被重置为0
    • 剩余值会被重置为最大限制值
    • 下一次重置时间会被设置为明天0点
  4. 阻止状态处理

    • 如果限流配置当前被阻止isBlocked = true任务会自动解除阻止状态
    • 解除阻止状态后API 调用可以正常进行
    • 如果限流配置没有被阻止isBlocked 字段保持不变
  5. 数据一致性

    • 任务执行前,确保所有限流配置的数据完整
    • 任务执行后,检查重置结果是否正确
    • 如果任务执行失败,需要手动重置限流配置
  6. 监控和告警

    • 建议监控任务执行状态
    • 如果任务执行失败,及时告警
    • 定期检查限流配置的重置时间是否正确

相关接口

相关文档

无(该任务为系统维护任务,无专门的需求文档和架构决策)

测试信息

测试环境

  • 环境: 开发环境
  • 版本: v1.0

测试用例

测试场景 输入参数 预期结果 实际结果 状态
正常重置 无配置 成功重置所有每日限流配置 成功重置所有每日限流配置 通过
重置被阻止的配置 isBlocked = true 解除阻止状态,重置使用量和剩余值 解除阻止状态,重置使用量和剩余值 通过
重置未阻止的配置 isBlocked = false 重置使用量和剩余值,保持阻止状态不变 重置使用量和剩余值,保持阻止状态不变 通过
重置时间为明天0点 当前时间为任意时间 重置时间设置为明天0点 重置时间设置为明天0点 通过
无每日限流配置 limitType != "Daily" 不处理该配置 不处理该配置 通过

实现细节

  • 使用 @Component("rateLimitResetTask") 注解注册为 Spring Bean
  • 使用 @Slf4j 注解进行日志记录
  • 使用 @Autowired 注入 IDataiIntegrationRateLimitService
  • 查询所有每日限流配置limitType = "Daily"
  • 遍历每个限流配置,执行重置操作
  • 如果当前被阻止,解除阻止状态
  • 重置使用量为0剩余值为最大限制值
  • 更新重置时间为明天0点
  • 更新数据库
  • 记录详细的日志信息,便于问题排查