课程 281 / 365
77%
正文已完成
L281设计一个可恢复的任务队列
交付含状态、重试、幂等和人工接管规则的小型队列方案。
能把任务排成队不等于可靠。消费者可能在处理一半时崩溃,任务可能被重复投递,失败也可能永久卡住。一个可恢复队列至少要定义状态、确认时机、重试边界与人工接管。
能设计一个不会因进程中断而悄悄丢任务的队列状态模型。
核心概念
先把关键判断说清楚
状态必须可持久化
queued、running、succeeded、failed 等状态要保存在进程外,重启后才能知道哪些任务尚未收口。
至少一次意味着会重复
许多队列宁可重复投递,也要避免任务丢失,因此消费者需要幂等键或重复检测。
失败要有终点
重试次数、退避时间和死信队列把暂时故障与需要人工处理的问题分开。
案例拆解
生成报告任务在重启后续跑
服务在写出 PDF 前重启,旧实现已经从内存队列删除任务,用户既收不到文件也看不到失败。
- 01
任务入队时写入持久存储,状态为 queued,并生成幂等键。
- 02
消费者领取后改为 running,成功写入文件地址后才确认完成。
- 03
超时任务按指数退避重试三次,仍失败则进入 needs_review 并通知人工。
案例结果
重启后未完成任务可重新领取,重复执行也不会生成多份对外结果。
提交前练习
现在轮到你
为一个可能耗时或失败的后台任务设计可恢复队列。
内容会自动保存在当前设备
查看参考答案与评分标准
参考答案
任务是发送结算通知;状态 queued/running/sent/failed/review;幂等键为账期+客户 ID;网络错误按 1、5、20 分钟重试三次,参数错误不重试;进入 review 时附请求 ID、错误码和最近一次响应。
评分标准
- 状态能覆盖中断恢复
- 幂等键对应业务动作
- 重试与人工接管边界明确
本课收口 · 学习证据
完成,不等于随手打一个勾。
确认阅读、保存练习,再用 30 秒检查和一句话总结留下真实学习证据。
02完成本课练习0 / 4 项必填内容已填写
03通过理解检查约 30 秒
你现在更接近哪一种状态?
完成上面三项后,才能把本课记为已验证。
资料来源
继续核对与延伸阅读
本课内容最近更新于 。
- Monitoring Distributed Systems↗reference · 核对日期 2026-08-23
- OpenTelemetry Signals↗official-docs · 核对日期 2026-08-23