37 lines
1.2 KiB
C#
37 lines
1.2 KiB
C#
using Fake.EventBus.Distributed;
|
||
using Fake.UnitOfWork;
|
||
using Microsoft.Extensions.Logging;
|
||
using Microsoft.Extensions.Options;
|
||
|
||
namespace Oms.Application.Messaging;
|
||
|
||
/// <summary>
|
||
/// 通过 Fake 分布式事件总线(Outbox)发布订单批量任务。
|
||
/// </summary>
|
||
public sealed class OrderBatchJobPublisher(
|
||
IDistributedEventBus eventBus,
|
||
IUnitOfWorkManager unitOfWorkManager,
|
||
IOptions<OrderBatchRabbitMqOptions> options,
|
||
ILogger<OrderBatchJobPublisher> 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);
|
||
}
|
||
}
|