tasks.md 2.4 KB

定时任务并发重试治理 Implementation Plan

status: completed scope: V4 only

进度

Task 状态 完成度
Task 1 策略字段和枚举 completed 2/2
Task 2 执行生命周期 completed 1/1
Task 3 分布式并发控制 completed 3/3
Task 4 有限重试 completed 3/3
Task 5 Misfire 适配 completed 2/2
Task 6 验证 completed 3/3

Task 1: 策略字段和枚举

  • 涉及文件:
    • Create: forge-server/db/migration/V__add_job_execution_policies.sql
    • Create: constant/JobConcurrentPolicy.java、JobMisfirePolicy.java
    • Modify: entity/SysJobConfig.java、entity/SysJobLog.java
  • 增加并发、Misfire、幂等和执行实例字段。
  • 保持日志 0=失败、1=成功兼容。
  • Task 2: 执行生命周期

    • 涉及文件:
      • Create: service/JobExecutionLifecycleService.java
      • Modify: mapper/SysJobLogMapper.java、SysJobLogMapper.xml
    • 关键签名:
      • Long accept(JobExecutionContext context, Long jobConfigId)
      • void markSuccess(Long executionId, String result, int retryCount)
      • void markFailed(Long executionId, Throwable error, int retryCount)
      • void markSkipped(Long executionId, String reason)
    • 测试单记录状态流转和重复更新保护。

    Task 3: 分布式并发控制

    • 涉及文件:
      • Create: manager/JobExecutionLockManager.java
      • Modify: pom.xml
      • Test: manager/JobExecutionLockManagerTest.java
    • 使用 Redisson tryLock,不等待排队。
    • Redis 故障时受保护任务失败关闭。
    • 锁键包含平台任务 ID,不使用可编辑展示字段。

    Task 4: 有限重试

    • 涉及文件:
      • Create: service/JobRetryExecutor.java
      • Modify: support/JobConfigValidator.java
    • 非幂等任务 retryCount 大于 0 时拒绝保存。
    • 固定退避和最大次数受平台上限约束。
    • 最终结果和实际次数写回同一执行记录。

    Task 5: Misfire 适配

    • 涉及文件:
      • Modify: scheduler/JobScheduler.java
      • Test: scheduler/JobMisfirePolicyTest.java
    • CRON 映射 FIRE_ONCE_NOW、DO_NOTHING。
    • 若 V3 已实施,同步验证 ONCE 的适用规则。

    Task 6: 验证

    • 创建 test-spec.md 和 execution-log.md。
    • 运行并发、重试、Misfire 定向测试和 job 模块全量测试。
    • 使用两个锁管理器共享测试锁状态,可重复验证竞争立即跳过和释放后重新获取。