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