SuperAPI AI 工具集

outbox-pattern

通用与其它

查看项目

更新于 10-16 04:28

技能介绍

用途:事务性发件箱模式,用于在数据库事务内同时写入状态变更与待发布事件,再异步投递,保证数据库写入与事件发布原子。适用于事件驱动微服务、恰好一次投递、避免 DB 与消息代理双写问题、解耦领域逻辑与消息基础设施,以及需要 CDC 发布的高吞吐系统。

主要能力:给出 outbox 表结构(含 aggregate_type、aggregate_id、event_type、payload JSONB、idempotency_key、created_at、published_at、retry_count、last_error)及未发布消息、聚合排序、幂等键索引;提供 SQLAlchemy 模型与确定性幂等键生成;演示在同一事务中写入业务数据与 outbox 消息;提供轮询发布器(用 FOR UPDATE SKIP LOCKED 防重复处理、批量发布、失败记录重试与错误);提供基于 Debezium 的 CDC 高吞吐方案与 Kafka Connect 配置;提供使用 Redis 与数据库双重去重的幂等消费者;并给出 Dapr 内置 outbox 的用法。同时列出轮询与 CDC 的取舍、关键决策表和禁止的反模式(如提交前发布、无锁处理、无幂等键等)。

使用方式:按资料中的 SQL 建表并建立索引;用 SQLAlchemy 定义 OutboxMessage 与 ProcessedEvent;在业务事务中 add 业务实体与 outbox 消息并 flush;由后台轮询器按批发布未发布记录,或配置 Debezium 连接器做 CDC 发布;消费者侧用幂等键去重。

限制:资料未提供具体安装命令、版本兼容范围、性能基准或价格信息;轮询吞吐约 10K/s 以内、延迟 1-5 秒,CDC 需 Kafka Connect 等额外基础设施且更复杂。