public void ExchangePublish(string message, string exchange, string routingKey, string exchangeType = ExchangeType.Direct)
        {
            if (string.IsNullOrEmpty(message))
            {
                throw new ArgumentNullException(nameof(message));
            }
            if (string.IsNullOrEmpty(exchange))
            {
                throw new ArgumentNullException(nameof(exchange));
            }
            if (string.IsNullOrEmpty(routingKey))
            {
                throw new ArgumentNullException(nameof(routingKey));
            }

            var exchangeCfg = rabbitConfigurationProvider.GetExchangeConfig();

            var channel = rabbitConnection.GetChannel();

            channel.ExchangeDeclare(exchange, exchangeType, durable: false, autoDelete: false, arguments: null);

            var body = Encoding.UTF8.GetBytes(message);

            var expiration      = exchangeCfg?.DefaultMessageExpiration;
            var basicProperties = expiration is null ? null : channel.CreateBasicProperties();

            if (basicProperties != null)
            {
                basicProperties.Expiration = expiration.Value.ToString();
            }

            channel.BasicPublish(exchange: exchange,
                                 routingKey: routingKey,
                                 basicProperties: basicProperties,
                                 mandatory: false,
                                 body: body);
        }