using Fake.EventBus.Distributed; using Fake.UnitOfWork; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace Oms.Application.Messaging; /// /// 通过 Fake 分布式事件总线(Outbox)发布订单批量任务。 /// public sealed class OrderBatchJobPublisher( IDistributedEventBus eventBus, IUnitOfWorkManager unitOfWorkManager, IOptions options, ILogger logger) : IOrderBatchJobPublisher { public bool IsEnabled => options.Value.Enabled; public async Task PublishAsync(OrderBatchJobMessage message, CancellationToken cancellationToken = default) { if (!options.Value.Enabled) { throw new InvalidOperationException("Order batch RabbitMQ is disabled."); } var @event = OrderBatchJobIntegrationEvent.FromMessage(message); await OmsIntegrationEventPublisher.PublishAsync( eventBus, unitOfWorkManager, logger, @event, cancellationToken); logger.LogDebug( "Outbox enqueued order batch event {EventId} messageId={MessageId} action={Action}", @event.Id, message.MessageId, message.Action); } }