Files
junhong_cmp_fiber/docs/tech-public-foundation/创建命令幂等契约.md
break 17782d5f8e
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
实现七月迭代公共技术基础
2026-07-23 17:52:48 +09:00

20 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 创建命令幂等与并发职责契约
创建类命令使用“调用主体 + 操作类型 + `request_id`”作为入口身份,并把影响业务结果的专用命令 DTO 计算为带版本的 SHA-256 指纹。时间戳、签名、Token、Authorization、Cookie 和 Nonce 等易变传输字段不进入指纹;业务模块应尽量直接传专用 DTO避免把任意 HTTP 请求整体作为业务身份。
同一作用域中,相同 `request_id` 与相同指纹返回已保存的业务结果;指纹不同返回统一冲突且不得覆盖原事实。不同主体或不同操作类型即使复用同一 `request_id`,也属于不同命令。
应用层预查只改善返回体验。并发首写必须由业务表或业务幂等事实上的 PostgreSQL 唯一约束裁决,并与业务事实处于同一事务。公共基础不创建万能幂等表,业务模块自行保存结果定位和稳定业务唯一键。
各类身份与并发职责不得混用:
| 构件 | 唯一职责 |
|---|---|
| `request_id` + 指纹 | 识别入口命令重放与内容冲突 |
| `event_id` | 识别至少一次投递中的同一事件 |
| 业务唯一键/唯一流水 | 防止同一业务副作用重复落库 |
| 状态条件更新 | 裁决状态机是否可从预期状态推进 |
| 钱包 `version` | 裁决余额、冻结额等并发数值更新 |
| Worker 租约 | 暂时决定当前处理者,不证明副作用尚未发生 |
| Redis 锁或 `SETNX` | 降低热点并发;故障、过期或切主不能破坏最终正确性 |