消费者cultureInfo 自动处理,消费成功自动设置事件状态
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
79fd83449a
commit
f67ebce739
|
@ -36,6 +36,7 @@ using IRaCIS.Core.Application.MassTransit.Consumer;
|
|||
using DocumentFormat.OpenXml.InkML;
|
||||
using IRaCIS.Core.Domain;
|
||||
using MassTransit.Internals;
|
||||
using IRaCIS.Core.Domain.BaseModel;
|
||||
|
||||
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
|
||||
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
|
||||
|
@ -184,7 +185,7 @@ builder.Services.AddMassTransit(cfg =>
|
|||
cfg.UseHangfireScheduler();
|
||||
|
||||
cfg.UseConsumeFilter(typeof(CultureInfoFilter<>), context,
|
||||
x => x.Include(type => type.HasInterface(typeof(IConsumer<>))));
|
||||
x => x.Include(type => type.IsAssignableTo(typeof(DomainEvent))));
|
||||
|
||||
|
||||
// 这里可以进行额外的配置
|
||||
|
|
|
@ -41,6 +41,8 @@ public class UserSiteSurveySubmitedEventConsumer(
|
|||
|
||||
var trialSiteSurveyId = context.Message.TrialSiteSurveyId;
|
||||
|
||||
return;
|
||||
|
||||
var siteSurveyInfo = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefault().IfNullThrowException();
|
||||
|
||||
var trialId = siteSurveyInfo.TrialId;
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using IRaCIS.Core.Domain.BaseModel;
|
||||
using MassTransit;
|
||||
|
||||
public class CultureInfoFilter<T> : IFilter<ConsumeContext<T>> where T : DomainEvent
|
||||
{
|
||||
public async Task Send(ConsumeContext<T> context, IPipe<ConsumeContext<T>> next)
|
||||
{
|
||||
var cultureInfoName = context.Message.CultureInfoName;
|
||||
|
||||
if (!string.IsNullOrEmpty(cultureInfoName))
|
||||
{
|
||||
// 设置线程的文化信息
|
||||
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureInfoName);
|
||||
Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureInfoName);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 继续处理消息
|
||||
await next.Send(context);
|
||||
}
|
||||
finally
|
||||
{
|
||||
// 还原文化信息(可选)
|
||||
// Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; // 或者之前的文化
|
||||
// Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
|
||||
}
|
||||
}
|
||||
|
||||
public void Probe(ProbeContext context) { }
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using IRaCIS.Core.Domain.BaseModel;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using MassTransit;
|
||||
using NPOI.SS.Formula.Functions;
|
||||
|
||||
public class CultureInfoFilter<T> (IRepository<EventStoreRecord> _eventStoreRecordRepository) : IFilter<ConsumeContext<T>> where T : DomainEvent
|
||||
{
|
||||
|
||||
public async Task Send(ConsumeContext<T> context, IPipe<ConsumeContext<T>> next)
|
||||
{
|
||||
var cultureInfoName = context.Message.CultureInfoName;
|
||||
|
||||
var eventId = context.Message.EventId;
|
||||
|
||||
if (!string.IsNullOrEmpty(cultureInfoName))
|
||||
{
|
||||
CultureInfo.CurrentCulture = new CultureInfo(cultureInfoName);
|
||||
CultureInfo.CurrentUICulture = new CultureInfo(cultureInfoName);
|
||||
}
|
||||
|
||||
|
||||
await next.Send(context);
|
||||
|
||||
await _eventStoreRecordRepository.BatchUpdateNoTrackingAsync(t => t.Id == eventId, u => new EventStoreRecord() { EventState= EventStateEnum.ConsumeSuccessed } );
|
||||
}
|
||||
|
||||
public void Probe(ProbeContext context)
|
||||
{
|
||||
context.CreateFilterScope("CultureInfoFilter");
|
||||
}
|
||||
}
|
|
@ -46,15 +46,9 @@ public class EventStoreRecordService(IRepository<EventStoreRecord> _eventStoreRe
|
|||
|
||||
var domainEvent = storedEvent.EventData.JsonStrToObject(Type.GetType(storedEvent.EventType));
|
||||
|
||||
CultureInfo.CurrentCulture = new CultureInfo(StaticData.CultureInfo.en_US);
|
||||
|
||||
var tt = (UserSiteSurveySubmitedEvent)domainEvent;
|
||||
|
||||
tt.CultureInfoName = CultureInfo.CurrentCulture.Name;
|
||||
|
||||
//IMediator 发布的时候,设置当前线程的CultureInfo 消费者会与发布线程CultureInfo 一致 分布式的话 _publishEndpoint 会不一致,需要手动设置
|
||||
|
||||
await _publishEndpoint.Publish(domainEvent.GetType(), tt);
|
||||
await _publishEndpoint.Publish(domainEvent.GetType(), domainEvent);
|
||||
|
||||
return ResponseOutput.Ok();
|
||||
|
||||
|
|
Loading…
Reference in New Issue