fix: harden queue retries and quota reservation
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user