浏览 AI 知识库
定时任务怎么设置:写清输入、失败通知、重试和停止条件
定时任务需要的不只是执行时间。输入来源、幂等、最大重试、失败通知和停止条件缺一项,都可能让一次小故障变成持续外部影响。
按实际操作顺序推进
每完成一段就检查当前输出,确认结果符合预期后再继续。
凌晨任务每分钟重试,为什么早上才发现限额耗尽
凌晨任务失败后每分钟重试,持续向供应商接口发送相同订单,早上才发现限额耗尽。没有通知、最大重试和停止条件的定时任务不是自动化。
- 输入与成功条件明确
- 重试次数和停止条件有限
- 告警和恢复演练实际完成
动手前,把材料和不能改的部分定下来
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | 任务每天 02:00 导入前一天订单;输入文件可能迟到;接口支持幂等键;值班邮箱可接收告警。 |
| 不能越过的边界 | 写明输入、水位、幂等、超时、有限退避、失败通知和手动停止;不无限重试。 |
| 要交付的结果 | 调度契约与失败演练记录 |
定时任务怎么设置,从“输入和触发”开始做
输入和触发
定义时间、时区、节假日、数据就绪条件和补跑方式,避免仅靠整点假设。
幂等与并发
使用批次 ID、唯一键或状态表,重复触发不重复发送、扣费或覆盖。
超时与重试
区分可重试瞬时错误和永久错误,设置退避、最大次数与死信或待处理区。
通知与观测
日志含任务、批次、开始结束、输入输出和错误层;失败通知有独立通道和负责人。
停止与恢复
提供禁用开关、清理部分结果、从检查点恢复和人工批准路径,先做故障演练。
同一批次重复触发时,只产生一个结果
| 故障 | 输入 | 预期 | 证据 |
|---|---|---|---|
| 输入晚到 | 9:00 任务启动但数据未完成 | 进入待处理,不生成空报表 | 批次状态和重试原因 |
| 重复触发 | 同一 batch_id 启动两次 | 只有一个输出和通知 | 唯一键/锁日志 |
| 上游超时 | 30 秒无响应 | 退避后有限重试,超限告警 | 重试次数和死信 |
| 部分成功 | 3/5 文件完成 | 可从检查点恢复,不重复 3 个 | 文件级状态和恢复记录 |
时间和批次为演示;真实调度需按时区、节假日和业务窗口配置。
完成后的调度契约与失败演练记录
调度契约规定文件未到时每 15 分钟重试最多 4 次;接口错误指数退避 3 次;同一批次使用固定幂等键。最终失败发含批次、错误和处理入口的邮件,任务进入 paused 而非继续循环。
为什么“失败通知发出,但无法安全重跑”还不能交付
失败通知发出,但无法安全重跑
- 原因
- 任务没有记录已完成游标和幂等范围
- 怎么改
- 保存批次状态、输入哈希和已处理位置,演练从失败点恢复
