/// <summary>
        /// Add batch message handler.
        /// </summary>
        /// <typeparam name="TBatchMessageHandler">Batch message handler type.</typeparam>
        /// <param name="services">Service collection.</param>
        /// <param name="configuration">RabbitMq configuration section.</param>
        /// <returns>Service collection.</returns>
        public static IServiceCollection AddBatchMessageHandler <TBatchMessageHandler>(this IServiceCollection services, IConfiguration configuration)
            where TBatchMessageHandler : BaseBatchMessageHandler
        {
            CheckIfBatchMessageHandlerAlreadyConfigured <TBatchMessageHandler>(services);
            services.TryAddSingleton <IRabbitMqConnectionFactory, RabbitMqConnectionFactory>();
            var configurationInstance = RabbitMqClientOptionsDependencyInjectionExtensions.GetRabbitMqClientOptionsInstance(configuration);

            services.ConfigureBatchConsumerConnectionOptions <TBatchMessageHandler>(configurationInstance);
            services.AddHostedService <TBatchMessageHandler>();
            return(services);
        }
        /// <summary>
        /// Add a transient fully-functional RabbitMQ client and required service infrastructure.
        /// </summary>
        /// <remarks>
        /// QueueService will be added in the transient mode.
        /// </remarks>
        /// <param name="services">Service collection.</param>
        /// <param name="configuration">RabbitMq configuration section.</param>
        /// <returns>Service collection.</returns>
        public static IServiceCollection AddRabbitMqClientTransient(this IServiceCollection services, IConfiguration configuration)
        {
            services.CheckIfQueueingServiceAlreadyConfigured <IQueueService>();
            services.AddRabbitMqClientInfrastructure();
            var configurationInstance = RabbitMqClientOptionsDependencyInjectionExtensions.GetRabbitMqClientOptionsInstance(configuration);
            var guid = Guid.NewGuid();

            services.ConfigureRabbitMqConnectionOptions(guid, configurationInstance);
            services.ResolveTransientQueueService(guid);
            return(services);
        }