Пример #1
0
        public static Message <Null, byte[]> ConvertToKafkaMessage(this BaseMessage message)
        {
            if (string.IsNullOrWhiteSpace(message.MessageId))
            {
                message.MessageId = Guid.NewGuid()
                                    .ToString()
                                    .ToUpper();
            }

            message.SendDateTime = DateTime.Now;

            var headers = new Headers();

            foreach (var property in message.Properties)
            {
                if (!(property.Value is string str))
                {
                    throw new
                          MessagingException($"The value of property {property.Key} is not a string. Kafka adapter support only string properties");
                }

                headers.Add(property.Key, Encoding.UTF8.GetBytes(str));
            }

            return(new Message <Null, byte[]>
            {
                Timestamp = new Timestamp(message.SendDateTime.GetValueOrDefault()),
                Headers = headers,
                Value = message.GetMessageBodyAsBytes()
            });
        }
Пример #2
0
 /// <inheritdoc />
 /// <summary>
 ///   Отправляет сообщение в очередь
 /// </summary>
 /// <returns>Отправленное сообщение с заполнеными датой отправки и идентификатором сообщения</returns>
 public BaseMessage Send(BaseMessage message)
 {
     _logger.LogDebug("Try to send message to queue with id: {queueId}", _configuration.Id);
     message.ThrowIfNull(nameof(message));
     CheckDisposed();
     CheckAndReconnect();
     try
     {
         var body = message.GetMessageBodyAsBytes();
         _advancedBus.Publish(_exchange, _configuration.Id, false, message.ConvertToProperties(_configuration), body);
         _logger.LogDebug("Done to send message to queue with id: {queueId}", _configuration.Id);
         LogMessageInternal(message, true);
         return(message);
     }
     catch (Exception ex)
     {
         _logger.LogError(ex, "RabbitMQ PUT failure on queue with ID: {queueId}", _configuration.Id);
         throw new MessagingException(ex, "Messaging error while sending message. See inner exception for more details");
     }
 }