1.6 KiB
1.6 KiB
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 唯一约束和回滚行为。