Skip to content
阅读进度

如何理解事务 Outbox 与异步传播? ​

返回 EachOf 项目 目录

项目版本说明

这些问答整合历史设计与实现资料;当前 main 分支 README 以工作包描述建设状态。具体能力、实验数据与设计目标的边界见项目状态与证据。

标准回答 ​

如果数据库状态已变更,而发送后台消息失败,就会丢失传播;如果先发消息再提交数据库,消费者又可能看到尚未成立的事件。事务 Outbox 将状态变化与待处理事件一起写入数据库,由后台可靠重放。

EachOf 的资源撤销路径在事务中更新相关当前状态并写入 resource.revoked 事件,之后处理依赖传播。消费者要能重复处理同一事件,记录进度或稳定效果,失败后继续,而不是假设消息只到达一次。

同步边界应立刻使当前读取不再接受已撤销内容,异步部分完成下游隔离、重建或清理。后台暂时积压不能变成撤销后仍可读取的授权窗口。事务中若直接处理很多关联项,耗时仍可能增长,不能仅凭称为短事务就宣称常数延迟。

追问与回答 ​

Outbox 发出后进程崩溃,状态没标发送成功 ​

可能重复投递,消费者应幂等;先标成功再发送则可能丢消息,不能用这种顺序消除重复。

是否必须引入独立消息中间件 ​

不一定,数据库 Outbox 可以由受控轮询消费;是否加队列取决于吞吐、隔离和运维要求。

易混淆点 ​

  • 依赖后台最终清理来保证即时权限失效。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。