public async Task TearDown(TopologySection topologySection) { var subscriptions = topologySection.Entities.Where(e => e.Type == EntityType.Subscription).ToList(); if (subscriptions.Any()) { var subscriptionCreator = (ICreateAzureServiceBusSubscriptions)container.Resolve(typeof(ICreateAzureServiceBusSubscriptions)); var subscriptionCreatorAbleToDeleteSubscriptions = subscriptionCreator as ICreateAzureServiceBusSubscriptionsAbleToDeleteSubscriptions; if (subscriptionCreatorAbleToDeleteSubscriptions == null) { return; } foreach (var subscription in subscriptions) { var topic = subscription.RelationShips.First(r => r.Type == EntityRelationShipType.Subscription); var forwardTo = subscription.RelationShips.FirstOrDefault(r => r.Type == EntityRelationShipType.Forward); var sqlFilter = (subscription as SubscriptionInfo)?.BrokerSideFilter.Serialize(); var metadata = (subscription as SubscriptionInfo)?.Metadata ?? new SubscriptionMetadata(); await subscriptionCreatorAbleToDeleteSubscriptions.DeleteSubscription(topicPath : topic.Target.Path, subscriptionName : subscription.Path, metadata : metadata, sqlFilter : sqlFilter, namespaceManager : namespaces.Get(subscription.Namespace.Alias), forwardTo : forwardTo?.Target.Path).ConfigureAwait(false); } } }
public TopologySection DetermineResourcesToUnsubscribeFrom(Type eventtype) { TopologySection result; if (!subscriptions.TryRemove(eventtype, out result)) { result = new TopologySection { Entities = new List <SubscriptionInfo>(), Namespaces = new List <RuntimeNamespaceInfo>() }; } return(result); }
public void Start(TopologySection topologySection, int maximumConcurrency) { maxConcurrency = maximumConcurrency; topology = topologySection; StartNotifiersFor(topology.Entities); foreach (var operation in pendingStartOperations) { operation(); } pendingStartOperations = new List <Action>(); running = true; }
public async Task Create(TopologySection topology) { if (!await hasManageRights.Value.ConfigureAwait(false)) { Logger.Info($"Configured to create topology, but have no manage rights for the following namespace(s): {namespacesWithoutManageRightsJoined}. Execution will continue and assume the topology is already created."); return; } var queues = topology.Entities.Where(e => e.Type == EntityType.Queue).ToList(); var topics = topology.Entities.Where(e => e.Type == EntityType.Topic).ToList(); var subscriptions = topology.Entities.Where(e => e.Type == EntityType.Subscription).ToList(); if (queues.Any()) { var queueCreator = (ICreateAzureServiceBusQueues)container.Resolve(typeof(ICreateAzureServiceBusQueues)); foreach (var queue in queues) { await queueCreator.Create(queue.Path, namespaces.Get(queue.Namespace.Alias)).ConfigureAwait(false); } } if (topics.Any()) { var topicCreator = (ICreateAzureServiceBusTopics)container.Resolve(typeof(ICreateAzureServiceBusTopics)); foreach (var topic in topics) { await topicCreator.Create(topic.Path, namespaces.Get(topic.Namespace.Alias)).ConfigureAwait(false); } } if (subscriptions.Any()) { var subscriptionCreator = (ICreateAzureServiceBusSubscriptions)container.Resolve(typeof(ICreateAzureServiceBusSubscriptions)); foreach (var subscription in subscriptions) { var topic = subscription.RelationShips.First(r => r.Type == EntityRelationShipType.Subscription); var forwardTo = subscription.RelationShips.FirstOrDefault(r => r.Type == EntityRelationShipType.Forward); var sqlFilter = (subscription as SubscriptionInfo)?.BrokerSideFilter.Serialize(); var metadata = (subscription as SubscriptionInfo)?.Metadata ?? new SubscriptionMetadata(); await subscriptionCreator.Create(topic.Target.Path, subscription.Path, metadata, sqlFilter, namespaces.Get(subscription.Namespace.Alias), forwardTo?.Target.Path).ConfigureAwait(false); } } }