外观
如何理解事务 Outbox 与异步传播?
项目版本说明
这些问答整合历史设计与实现资料;当前 main 分支 README 以工作包描述建设状态。具体能力、实验数据与设计目标的边界见项目状态与证据。
标准回答
如果数据库状态已变更,而发送后台消息失败,就会丢失传播;如果先发消息再提交数据库,消费者又可能看到尚未成立的事件。事务 Outbox 将状态变化与待处理事件一起写入数据库,由后台可靠重放。
EachOf 的资源撤销路径在事务中更新相关当前状态并写入 resource.revoked 事件,之后处理依赖传播。消费者要能重复处理同一事件,记录进度或稳定效果,失败后继续,而不是假设消息只到达一次。
同步边界应立刻使当前读取不再接受已撤销内容,异步部分完成下游隔离、重建或清理。后台暂时积压不能变成撤销后仍可读取的授权窗口。事务中若直接处理很多关联项,耗时仍可能增长,不能仅凭称为短事务就宣称常数延迟。
追问与回答
Outbox 发出后进程崩溃,状态没标发送成功
可能重复投递,消费者应幂等;先标成功再发送则可能丢消息,不能用这种顺序消除重复。
是否必须引入独立消息中间件
不一定,数据库 Outbox 可以由受控轮询消费;是否加队列取决于吞吐、隔离和运维要求。
易混淆点
- 依赖后台最终清理来保证即时权限失效。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q158