feat: add reusable MySQL outbox and HTTP lifecycle example

This commit is contained in:
2026-09-24 20:54:36 +08:00
parent 0140c78ea7
commit e29dec717f
52 changed files with 2488 additions and 357 deletions

View File

@@ -26,6 +26,7 @@
- 任务来源通过独立只读路由查询,tasks:read仅授予当前任务的有限来源引用;计划定义仍需schedules:read。显式核对命名空间、队列、计划、触发与固定版本,悬空/错误/未实现所有者不得默认为DIRECT;不依赖外键,也不向派发路径加入来源查询。
- 业务事务Outbox示例使用独立module和业务数据库,核心SDK不得引入SQL驱动。业务记录/待发命令同事务;原请求、操作ID、目标及提交键冻结,HTTP在事务外,确认按最新租约代次与业务关联同事务。24小时/100次预算内原键核对,禁止换键、重置预算或把ACCEPTED解释成业务成功;REVIEW保留待核查数据。
- 可复用业务Outbox位于 adapters/outbox/mysql 独立module。EnqueueTx只写调用方事务,不Commit/Rollback/HTTP;重复核对使用共享锁当前读,避免重复INSERT锁升级死锁。受理钩子与最新代次确认同事务,只允许同库短SQL,固定Outbox→业务行锁序。旧CLI与HTTP宿主共用发送核心;宿主关闭顺序为HTTP收尾→发送/执行收尾→结果消费收尾→数据库关闭,未结清记录保留原身份。
- 相对延迟delay_ms只在首次受理事务按数据库时间计算;原时长参与摘要,零值omitempty保持旧摘要。重报先返回原回执,禁止重算执行时间;总时限包含等待。计划模板拒绝非零delay_ms,人工重试不自动继承首次等待。