private ServiceBusEventConsumerHost(ServiceBusEventConsumerHostOptions consumerHostOptions, string subscriptionName, SubscriptionClient subscriptionClient, ManagementClient managementClient, ILogger logger)
            : base(logger)
        {
            Guard.NotNullOrWhitespace(subscriptionName, nameof(subscriptionName));
            Guard.NotNull(consumerHostOptions, nameof(consumerHostOptions));
            Guard.NotNull(subscriptionClient, nameof(subscriptionClient));
            Guard.NotNull(managementClient, nameof(managementClient));

            TopicPath        = consumerHostOptions.TopicPath;
            SubscriptionName = subscriptionName;

            _subscriptionBehavior = consumerHostOptions.SubscriptionBehavior;
            _subscriptionClient   = subscriptionClient;
            _managementClient     = managementClient;
        }
        /// <summary>
        ///     Start receiving traffic
        /// </summary>
        /// <param name="consumerHostOptions">
        ///     Configuration options that indicate what Service Bus entities to use and how they should behave
        /// </param>
        /// <param name="logger">Logger to use for writing event information for received events</param>
        public static async Task <ServiceBusEventConsumerHost> Start(ServiceBusEventConsumerHostOptions consumerHostOptions, ILogger logger)
        {
            Guard.NotNull(consumerHostOptions, nameof(consumerHostOptions));
            Guard.NotNull(logger, nameof(logger));

            logger.LogInformation("Starting Service Bus event consumer host");

            var managementClient = new ManagementClient(consumerHostOptions.ConnectionString);

            var subscriptionName = $"Test-{Guid.NewGuid().ToString()}";

            await CreateSubscriptionAsync(consumerHostOptions.TopicPath, managementClient, subscriptionName).ConfigureAwait(continueOnCapturedContext: false);

            logger.LogInformation("Created subscription '{subscription}' on topic '{topic}'", subscriptionName, consumerHostOptions.TopicPath);

            var subscriptionClient = new SubscriptionClient(consumerHostOptions.ConnectionString, consumerHostOptions.TopicPath, subscriptionName);

            StartMessagePump(subscriptionClient, logger);
            logger.LogInformation("Message pump started on '{SubscriptionName}' (topic '{TopicPath}' for endpoint '{ServiceBusEndpoint}')", subscriptionName, consumerHostOptions.TopicPath, subscriptionClient.ServiceBusConnection?.Endpoint?.AbsoluteUri);

            return(new ServiceBusEventConsumerHost(consumerHostOptions, subscriptionName, subscriptionClient, managementClient, logger));
        }