用途:在 .NET Clean Architecture 项目中实现 Outbox(发件箱)模式,保证领域事件可靠处理。
主要能力:1) 原子持久化,领域事件与聚合变更写入同一事务;2) 保证投递,即使应用崩溃事件仍会被处理;3) 通过异步处理与重试实现最终一致性;4) 通过幂等包装处理重复消费。
组件结构:OutboxMessage 为持久化事件实体,OutboxMessageConfiguration 负责 EF Core 映射,ProcessOutboxMessagesJob 为 Quartz 后台处理器,IdempotentDomainEventHandler 为去重处理包装,OutboxConsumer 为可选的直接数据库轮询器。目录位于 Infrastructure/Outbox 下。
使用方式:在 ApplicationDbContext 的 SaveChangesAsync 中先调用 ConvertDomainEventsToOutboxMessages 再保存,使事件与聚合在同一事务;OutboxMessage 记录 Id、程序集限定类型名、JSON 内容、发生时间、处理时间、错误与重试次数;用 EF Core 配置表名 outbox_message,Content 使用 jsonb,并为未处理和已处理消息建立索引。ProcessOutboxMessagesJob 每 10 秒轮询,批量 20 条,最大重试 3 次,反序列化后经 MediatR 发布;幂等处理器使用独立跟踪表避免重复处理;清理作业默认保留 7 天,分批删除。
适用场景:需要可靠事件投递的 .NET 后端,配合 EF Core、MediatR、Quartz 和 PostgreSQL。
限制:资料未提供安装命令、具体依赖版本、收费或价格信息;数据库方言、部署环境与性能指标暂未提供。