Пример #1
0
    public async Task Send(string topic, ToposMessage message, string partitionKey = null, CancellationToken cancellationToken = default)
    {
        if (topic == null)
        {
            throw new ArgumentNullException(nameof(topic));
        }
        if (message == null)
        {
            throw new ArgumentNullException(nameof(message));
        }

        var transportMessage = GetTransportMessage(message);

        _logger.Debug("Sending message with ID {messageId} to topic {topic}", transportMessage.GetMessageId(), topic);

        await _producerImplementation.Send(topic, partitionKey, transportMessage, cancellationToken);
    }
Пример #2
0
    TransportMessage GetTransportMessage(ToposMessage message)
    {
        var body          = message.Body;
        var headersOrNull = message.Headers;
        var headers       = headersOrNull?.Clone() ?? new Dictionary <string, string>();

        if (!headers.ContainsKey(ToposHeaders.MessageId))
        {
            headers[ToposHeaders.MessageId] = Guid.NewGuid().ToString();
        }

        if (!headers.ContainsKey(ToposHeaders.Time))
        {
            headers[ToposHeaders.Time] = DateTimeOffset.Now.ToIso8601DateTimeOffset();
        }

        var logicalMessage   = new LogicalMessage(headers, body);
        var transportMessage = _messageSerializer.Serialize(logicalMessage);

        return(transportMessage);
    }