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)); }