コード例 #1
0
    public async Task <bool> Publish(IntegrationEvent @event, CancellationToken cancellationToken)
    {
        foreach (var preSendingStep in _messagePreSendingSteps)
        {
            await preSendingStep.Execute(@event, cancellationToken);
        }

        var eventName = @event.GetMessageName();
        var json      = _messageSerializer.PackAsJson(@event);

        if (string.IsNullOrWhiteSpace(json))
        {
            return(false);
        }

        var message = new ServiceBusMessage(body: json)
        {
            MessageId = @event.Id.ToString(),
            Subject   = eventName,
        };
        await _sender.SendMessageAsync(message, cancellationToken);

        _logger.LogDebugIfEnabled("Event {EventName} with id {EventId} and '{Payload}' payload has been published at {PublishedAt} UTC",
                                  message.Subject, message.MessageId, json, DateTime.UtcNow);

        if (!_logger.IsEnabled(LogLevel.Debug))
        {
            _logger.LogInformationIfEnabled("Event {EventName} with id {EventId} has been published at {PublishedAt} UTC",
                                            message.Subject, message.MessageId, DateTime.UtcNow);
        }

        return(true);
    }