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

195 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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点
- 更新数据库
- 记录详细的日志信息,便于问题排查