feat: add durable relative task delays and outage recovery regression

This commit is contained in:
2026-09-17 23:43:57 +08:00
parent 522fe2ef3e
commit a664ec9370
34 changed files with 811 additions and 28 deletions

View File

@@ -26,6 +26,7 @@ P2 进展:服务端执行内核、WSS 与独立自动 Worker SDK 已可产生
| business_key | string | 可选 | 最多 191 个 Unicode 字符,无 NUL/换行;用于关联,不提供业务幂等 |
| concurrency_key | string | 可选,空为关闭 | 1–191 个 Unicode 字符,无控制字符和首尾空白;显式资源互斥键,同命名空间跨队列共享,见 [资源键契约](keyed-concurrency.md) |
| priority | 整数 | 可选,默认 0 | 0–9,冻结优先级,每级30秒排序优势;不提前延时任务,见 [优先级与公平派发](priority-and-fairness.md) |
| delay_ms | uint64 | 可选,默认 0 | 相对首次受理事务数据库时间的等待毫秒数,必须小于 task_timeout_ms;非零不能与 available_at 同用 |
| available_at | time / null | 受理时数据库时间 | 最早可执行时间;必须早于总截止时间,仅允许最多 1 秒的过去时间容差 |
| start_deadline_at | time / null | 无独立限制 | 必须晚于当前时间,不早于 available_at,不晚于总截止时间 |
| task_timeout_ms | uint64 | 0 或省略为 86400000 | 从受理时计算的总时限,最大 30 天(2592000000 毫秒) |
@@ -34,6 +35,10 @@ P2 进展:服务端执行内核、WSS 与独立自动 Worker SDK 已可产生
处理器及版本名称以 ASCII 字母或数字开头,后续只能包含字母、数字、`_ . : -`。时间年份为 2000–9998。
相对延迟通过`delay_ms`提交:首次受理时保存`available_at = created_at + delay_ms`,同键重报返回原受理回执,不能重新计时。`delay_ms`省略或0保留原有立即/绝对时间语义;负数、小数、字符串、null和溢出值均拒绝。总时限包含等待,最晚开始时间仍须满足上表。任务响应不新增delay_ms;当前available_at可能在安全重试后变为下一次退避时间,首次时间以原提交回执为准。见[完整SDK示例](../examples/delayed-task.md)。
批量每项支持相同字段,各项使用自己的首次受理数据库时间。相对时长和绝对时刻属于不同请求语义,即使碰巧对应相同时间,也不能在原幂等键下互换。启用delay_ms前先更新服务端;旧服务会拒绝未知字段,省略/零值不改变已有请求摘要。
| retry 字段 | 默认与限制 |
| --- | --- |
| max_attempts | 0 或省略为 1;范围 1–100,包含首次尝试 |