From fac077d2b7cfee9f2a612c631dbbe5eedf654350 Mon Sep 17 00:00:00 2001 From: hang <87227557@qq.com> Date: Mon, 7 Oct 2024 21:27:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interceptor/AuditEntityInterceptor.cs | 10 ++++++++++ .../Interceptor/DispatchDomainEventsInterceptor.cs | 1 + 2 files changed, 11 insertions(+) diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs index 32a2f49d9..bb37a9a52 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/AuditEntityInterceptor.cs @@ -1,4 +1,5 @@ using EntityFramework.Exceptions.Common; +using IRaCIS.Core.Domain.BaseModel; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infra.EFCore.Common; @@ -36,6 +37,15 @@ public class AuditEntityInterceptor(IUserInfo _userInfo, //////领域命令 (同一个事务提交的一些逻辑,类似Trigger 保存事务之前执行的一些逻辑) IMediator 和autofac 有冲突,不在一个事务,废弃。 //eventData.Context.AddDomainCommands(); //await DispatchDomainCommands(eventData.Context); + // var domainEvent = JsonSerializer.Deserialize(storedEvent.EventData, Type.GetType(storedEvent.EventType)); + //// 序列化事件 + //var eventData = JsonSerializer.Serialize(domainEvent); + + //var storedEvent = new StoredEvent + //{ + // EventType = domainEvent.GetType().Name, + // EventData = eventData + //}; //领域事件 eventData.Context.AddDomainEvents(); diff --git a/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs b/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs index b854a0dc3..171a9eeda 100644 --- a/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs +++ b/IRaCIS.Core.Infra.EFCore/Interceptor/DispatchDomainEventsInterceptor.cs @@ -13,6 +13,7 @@ namespace IRaCIS.Core.Infra.EFCore.Interceptor // IMediator 适用于单进程内的消息传递,不涉及外部消息中间件(如 RabbitMQ、Azure Service Bus 等) 使用本地的内存队列,而不是跨进程消息传递,适合轻量级、无中间件的场景 // 发件箱模式参考: https://dev.to/antonmartyniuk/use-masstransit-to-implement-outbox-pattern-with-ef-core-and-mongodb-oep#:~:text=MongoDB%20replica%20set%20is%20required%20for%20both%20publisher%20and%20consumer // 1、IPublishEndpoint 才会将事件存储到发件箱表中, 高级IBus接口时 - 消息不会存储在发件箱中,必须有savechanges 才会一起提交保存到数据库中 + // 2、进入消息代理之前,发布事件在OutboxState OutboxMessage, 进入消费者以后(已经删除OutboxState OutboxMessage),消费失败,需要修改代码重新发布,然后之前消费事件的重新处理,错误处理参考:https://www.youtube.com/watch?v=3TMKUu7c4lc public class DispatchDomainEventsInterceptor(IMediator _mediator) : SaveChangesInterceptor {