20 lines
1.6 KiB
Markdown
20 lines
1.6 KiB
Markdown
# 02 — 在业务事务中可靠写入公共 Outbox
|
||
|
||
**What to build:** 业务开发者可以沿用现有 GORM 显式事务,在提交业务事实的同一事务中写入权威公共 Outbox 事件。事件身份和关联标识在事务内稳定持久化,业务写入或 Outbox 写入任一步失败都会整体回滚,事务中不会调用 Redis、Asynq 或外部系统。
|
||
|
||
**Blocked by:** 01 — 建立公共迁移所有权与检查门禁
|
||
|
||
**Status:** ready-for-agent
|
||
|
||
**架构通道:** Application + Port/Adapter。
|
||
|
||
**完整业务边界:** 本票收口公共 Outbox 模型、事件信封、事务内追加 Port 和一个可观察的示例写入链路。明确不定义下游业务事件含义,不实现业务消费者,不引入 UnitOfWork、事务工厂或全仓事务重构。
|
||
|
||
- [ ] 公共 Outbox 具有稳定唯一的事件 ID、事件类型、载荷版本、聚合与资源定位、请求与关联标识、结构化载荷、投递生命周期、重试、租约和安全错误摘要字段。
|
||
- [ ] Outbox 内部状态固定为 `1=待投递、2=投递中、3=已投递、4=投递失败`,常量、模型注释和公开说明保持一致。
|
||
- [ ] 业务事实和 Outbox 使用同一 GORM 事务句柄;任一写入失败时二者均不可见,未提交事件不会被投递侧读取。
|
||
- [ ] 事件 ID、业务键及必要快照在事务内生成并持久化,重试过程中不会重新生成事件身份。
|
||
- [ ] 事务内不执行 Redis、Asynq、HTTP、对象存储或其他外部调用,Domain 不依赖 GORM。
|
||
- [ ] PostgreSQL 集成测试覆盖事务成功、业务写入失败、Outbox 写入失败、事件 ID 唯一约束和回滚行为。
|
||
|