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);
}
}