fix: harden queue retries and quota reservation

This commit is contained in:
237899745
2026-07-25 18:15:39 +08:00
parent 091a0cee75
commit f389dfb567
9 changed files with 358 additions and 101 deletions

View File

@@ -220,7 +220,7 @@ pub enum Permission {
计量口径见 `docs/billing.md`,架构上建议:
- Worker 在每个文件成功输出后写入 `usage_events`(账本明细),并更新 `usage_periods`(按订阅周期聚合)。
- API 在创建任务/接收同步压缩请求时做**配额预检**(快速失败)Worker 做**最终扣减**(账本落地,保证一致性)
- 登录用户与 API Key 在创建任务/接收同步压缩请求时做**配额预检**Worker 成功输出后做最终账本扣减。匿名请求在压缩前按会话和 IP 原子预占每日试用次数;同步处理或任务创建失败时退还,避免超额请求先消耗 CPU、批量并发穿透配额
- 对外 API 强烈建议支持 `Idempotency-Key`DB 侧存储“幂等记录 + 响应摘要”,避免重复扣减与重复任务。
### 7. 支付回调Webhooks

View File

@@ -533,9 +533,15 @@ TTL: 48 hours
```
Stream: stream:compress_jobs
Group: compress_workers
Message fields: { task_id, priority, created_at }
Message fields: { task_id, created_at }
Approximate max length: 100000
Dead-letter stream: stream:compress_jobs:dead
Dead-letter max length: 10000
```
Worker 每次优先处理本消费者 pending并认领空闲超过 5 分钟的其他消费者消息。消息第 3 次投递仍失败时写入死信流、将任务标记为失败并 ACK 原消息;已删除或已进入终态的任务直接 ACK。
### 5.4 任务进度(可选)
```
PubSub: pubsub:task:{task_id}