using Fake.DependencyInjection; using Fake.EventBus; using Fake.UnitOfWork; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Oms.Application.Services.Orders.Batch; namespace Oms.Application.Messaging; /// /// 订单批量集成事件处理器。 /// 正常返回 Ack;抛异常由 Fake.EventBus.RabbitMQ 重试后 Nack 进 DLX。 /// public sealed class OrderBatchJobEventHandler( OrderBatchJobProcessor processor, IUnitOfWorkManager unitOfWorkManager, IOptions options, ILogger logger) : IEventHandler, ITransientDependency { public async Task HandleAsync(OrderBatchJobIntegrationEvent @event, CancellationToken cancellationToken) { if (!options.Value.Enabled) { logger.LogDebug( "Order batch messaging disabled, skip event {EventId} action={Action}", @event.Id, @event.Action); return; } // ForecastBilling 成功后继续写轨迹/面单/自动触发 Outbox,须事务性 UoW using var unitOfWork = unitOfWorkManager.Begin(OmsOutboxUnitOfWork.Transactional()); await processor.ProcessAsync(@event.ToMessage(), cancellationToken); await unitOfWork.CompleteAsync(cancellationToken); } }