docs: create Bell task #17 acceptance archive
@@ -0,0 +1,44 @@
|
||||
# 17 Bell不可变Event与永久幂等收据
|
||||
|
||||
- 类型:需求
|
||||
- 所属 Epic:#7
|
||||
- 所属 MVP / 版本:#8
|
||||
- 状态:待验收
|
||||
- 日期:2026-08-12
|
||||
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/17
|
||||
- Wiki 页面:Task-17-Bell不可变Event与永久幂等收据
|
||||
- Wiki revision:见本地镜像头
|
||||
|
||||
## 背景与目标
|
||||
|
||||
可靠接收外部事件,在重试、并发和重启后保持永久幂等,同时禁止改写原始 Event。
|
||||
|
||||
## 最终方案
|
||||
|
||||
以 `(producer_id, source_event_id)` 唯一键和 payload hash 建立稳定 Receipt;相同正文返回原结果,不同正文返回冲突。Event/Receipt 持久化在同一事务,数据库触发器拒绝 Event 更新或删除,并提供游标分页与详情查询。
|
||||
|
||||
## 修改文件
|
||||
|
||||
- `Bell/server/app/event/`、`receipt/`:入站服务、HTTP、查询和类型。
|
||||
- `Bell/server/migrations/2026081202_event_receipt.sql`:不可变表、索引、Receipt 和触发器。
|
||||
- `Bell/web/src/views/event/Events.vue`:事件查询与技术详情。
|
||||
|
||||
## 验收结果
|
||||
|
||||
| 验收标准 | 结果 |
|
||||
|---|---|
|
||||
| 并发重复返回同一 Event/Receipt | 通过 |
|
||||
| 同键不同 payload 返回冲突 | 通过 |
|
||||
| 进程/连接重建后仍幂等 | 通过 |
|
||||
| Event 数据库层不可变 | 通过 |
|
||||
| 下游失败时不留下半成品 | 通过 |
|
||||
|
||||
## 测试
|
||||
|
||||
- 执行:PostgreSQL 集成测试,16 个并发相同入站、冲突、连接池重建、不可变触发器、事务 hook 回滚。
|
||||
- 结果:全部通过。
|
||||
- **未验证部分**:正式跨项目契约、生产规模压测与生产备份恢复。
|
||||
|
||||
## 相关提交
|
||||
|
||||
- `64a1d82` 不可变 Event 与永久幂等 Receipt(PR #35)。
|
||||
Reference in New Issue
Block a user