| 写入 | 业务表 + outbox 表在同一本地事务中提交 |
|---|---|
| 发布 | 中继轮询或 CDC 捕获 outbox 变更并投递 |
| 消费端 | 仍需幂等:投递语义通常是至少一次 |
表结构与中继(SQL 示意)
表结构与中继(SQL 示意)
CREATE TABLE outbox (
id BIGINT PRIMARY KEY,
aggregate_id VARCHAR(64),
payload JSON,
status TINYINT, -- 0 待发 1 已发
retry INT DEFAULT 0,
created_at DATETIME
);
-- 中继:取待发记录 → 投递成功 → 标记已发中继失败可重放:outbox 记录保留状态(待发/已发)与重试次数,便于观测与补偿。