/// <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));
            LogMessageInternal(message, true);

            CheckDisposed();
            CheckAndReconnect();

            try
            {
                var kafkaMessage = message.ConvertToKafkaMessage();
                _producer.Produce(_configuration.QueueName, kafkaMessage);
                _logger.LogDebug("Done to send message to queue with id: {queueId}", _configuration.Id);
                return(message);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Kafka PUT failure on queue with ID: {queueId}", _configuration.Id);
                throw new MessagingException(ex, "Messaging error while sending message. See inner exception for more details");
            }
        }