该技能用于在 .NET 清洁架构项目中实现 Outbox 模式,确保领域事件可靠处理。核心思路是原子持久化:领域事件在 SaveChanges 之前转换为 OutboxMessage 并与聚合变更在同一事务中保存,避免事件丢失。
主要组件包括:OutboxMessage 持久化实体(含类型、JSON 内容、发生时间、处理时间、错误与重试次数);OutboxMessageConfiguration 提供 EF Core 映射与索引;ProcessOutboxMessagesJob 使用 Quartz 后台轮询处理;IdempotentDomainEventHandler 通过 OutboxMessageConsumer 记账表实现幂等;另有 CleanupOutboxMessagesJob 定期清理旧消息。
用法上,DbContext 的 SaveChangesAsync 中先调用 ConvertDomainEventsToOutboxMessages,将实体领域事件序列化为 outbox 行;Quartz 任务默认每 10 秒轮询未处理消息(批大小 20,最大重试 3 次),反序列化后通过 MediatR 发布;幂等包装类按事件 ID 与处理器名去重;清理任务默认保留 7 天并分批删除。
限制与前提:需依赖 EF Core、MediatR、Quartz 及支持 jsonb 的数据库(示例为 PostgreSQL);Quartz 注册与初始化步骤在资料中未完整提供;重试次数用尽后消息被标记为已处理并记录错误,具体失败告警与监控机制暂未提供。