public void ReCreate(AzureBusTopicSettings settings, AzureBusTopicManagement queueManagement) { var topicName = settings.TopicNameBuilder(typeof(T)); var subscriptionName = $"{topicName}.{settings.TopicSubscriberId}"; queueManagement.CreateSubscriptionIfMissing(topicName, subscriptionName, typeof(T)); var subscriptionClient = new SubscriptionClient(settings.ConnectionString, topicName, subscriptionName); UpdateRules(subscriptionClient, settings); }
internal Binding(AzureBusTopicSettings settings, ILogger <AzureTopicSubscriber> logging, AzureBusTopicManagement queueManagement, BlockingCollection <IBinding> errorActions) { _excludeTopicsFromLogging = new LoggingConfiguration().ExcludeTopicsFromLogging(); var topicName = settings.TopicNameBuilder(typeof(T)); var subscriptionName = $"{topicName}.{settings.TopicSubscriberId}"; queueManagement.CreateSubscriptionIfMissing(topicName, subscriptionName, typeof(T)); var subscriptionClient = new SubscriptionClient(settings.ConnectionString, topicName, subscriptionName); UpdateRules(subscriptionClient, settings); subscriptionClient.RegisterMessageHandler( async(message, _) => { try { var body = Encoding.UTF8.GetString(message.Body); if (!_excludeTopicsFromLogging.Contains(topicName)) { logging.LogInformation("Received '{subscription}': {body} with Azure MessageId: '{messageId}'", subscriptionName, body, message.MessageId); } var asObject = AsObject(body); Subject.OnNext(asObject); } catch (Exception ex) { logging.LogError(ex, "Message {subscription}': {message} -> consumer error: {exception}", subscriptionName, message, ex); } }, new MessageHandlerOptions(async e => { logging.LogError(e.Exception, "At route '{subscription}' error occurred: {exception}.", subscriptionName, e.Exception); if (e.Exception is ServiceBusCommunicationException || e.Exception is MessagingEntityNotFoundException) { errorActions.Add(this); } })); }