コード例 #1
0
        public void CreateIfNotExists()
        {
            var queueDescriptions = namespaceManager.GetQueues("startswith(path, '" + this.basePath + "') eq TRUE");

            for (int i = 0; i < this.partitionCount; i++)
            {
                CreateQueuePartitionIfNotExists(queueDescriptions, this.GetQueuePartitionName(i));
            }
        }
コード例 #2
0
        public void TestGetQueues()
        {
            string           name        = "TestGetQueues";
            NamespaceManager ns          = NamespaceManager.CreateFromConnectionString(serviceBusConnectionString);
            QueueDescription description = ns.CreateQueue(name);

            Assert.IsTrue(null != description);

            try
            {
                QueueDescription testQueue = ns.GetQueues().FirstOrDefault(e => e.Path.Equals(name, StringComparison.InvariantCultureIgnoreCase));
                Assert.IsNotNull(testQueue);

                if (!ns.QueueExists(name, out description))
                {
                    Assert.Fail("Queue did not exist");
                }
                else
                {
                    Assert.IsTrue(null != description);
                }
            }
            finally
            {
                ns.DeleteQueue(name);
                if (ns.QueueExists(name, out description))
                {
                    Assert.Fail("Queue was not deleted");
                }
            }
        }
コード例 #3
0
ファイル: TaskHubWorker.cs プロジェクト: suwatch/durabletask
        /// <summary>
        ///     Creates all the underlying entities in Service bus and Azure Storage (if specified) for
        ///     the TaskHubWorker and TaskHubClient's operations. If TaskHub already exists then this is a no-op
        /// </summary>
        public void CreateHubIfNotExists(TaskHubDescription description)
        {
            NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

            IEnumerable <QueueDescription> queueDescriptions =
                namespaceManager.GetQueues("startswith(path, '" + hubName + "') eq TRUE");

            List <QueueDescription> descriptions = queueDescriptions.ToList();

            if (!descriptions.Any(q => string.Equals(q.Path, orchestratorEntityName)))
            {
                SafeCreateQueue(namespaceManager, orchestratorEntityName, true,
                                description.MaxTaskOrchestrationDeliveryCount);
            }

            if (!descriptions.Any(q => string.Equals(q.Path, workerEntityName)))
            {
                SafeCreateQueue(namespaceManager, workerEntityName, false, description.MaxTaskActivityDeliveryCount);
            }

            if (!descriptions.Any(q => string.Equals(q.Path, trackingEntityName)))
            {
                SafeCreateQueue(namespaceManager, trackingEntityName, true, description.MaxTrackingDeliveryCount);
            }

            if (!string.IsNullOrEmpty(tableStoreConnectionString))
            {
                var client = new TableClient(hubName, tableStoreConnectionString);
                client.CreateTableIfNotExists();
            }
        }
コード例 #4
0
        /// <summary>
        /// Method is used for abandoned subscriptions deleting (subscriptions to temporaries queues on fanout topics).
        /// Should be fixed in new Masstransit releases.
        /// </summary>
        /// <param name="settings">Service bus settings.</param>
        private static void DeleteAbandonedSubscriptions(ServiceBusSettings settings)
        {
            var serviceUri       = ServiceBusEnvironment.CreateServiceUri("sb", settings.AzureNamespace, string.Empty);
            var tokenProvider    = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", settings.AzureSharedAccessKey, TokenScope.Namespace);
            var namespaceManager = new NamespaceManager(serviceUri, tokenProvider);

            var queues = namespaceManager.GetQueues().Select(q => $"{namespaceManager.Address.AbsoluteUri.ToLower()}{q.Path.ToLower()}").ToList();

            var toExecute = new List <Action>();

            foreach (var topic in namespaceManager.GetTopics().Where(t => t.SubscriptionCount > 0))
            {
                foreach (var subscription in namespaceManager.GetSubscriptions(topic.Path).Where(s => !string.IsNullOrEmpty(s.ForwardTo)))
                {
                    if (!queues.Contains(subscription.ForwardTo.ToLower()))
                    {
                        toExecute.Add(() =>
                        {
                            namespaceManager.DeleteSubscription(topic.Path, subscription.Name);
                            Log.Information("Abandoned subscription removed: {topic} -> {subscription} -> {queue}",
                                            topic.Path, subscription.Name, subscription.ForwardTo);
                        });
                    }

                    Log.Debug("Found abandoned subscription: {topic} -> {subscription} -> {queue}", topic.Path, subscription.Name, subscription.ForwardTo);
                }
            }

            foreach (var execute in toExecute)
            {
                execute();
            }
        }
コード例 #5
0
        public IEnumerable <QueueSummary> ListQueues()
        {
            NamespaceManager namespaceManager = CreateNamespaceManager();

            var queues = namespaceManager.GetQueues().Select(q => QueueSummary.New(q));

            return(queues.OrderBy(q => q.name, StringComparer.CurrentCultureIgnoreCase));
        }
コード例 #6
0
        public ServiceBusManager(string connectionString)
        {
            _connectionString = connectionString;
            _namespaceManager = NamespaceManager.CreateFromConnectionString(_connectionString);
            _nameSpace        = _namespaceManager.Address.AbsolutePath.TrimStart('/');

            Queues = new ObservableCollection <QueueDescription>(_namespaceManager.GetQueues());
            Topics = new ObservableCollection <TopicDescription>(_namespaceManager.GetTopics());
        }
コード例 #7
0
        public void ListQueues()
        {
            IEnumerable <QueueDescription> queueDescriptions = m_NamespaceManager.GetQueues();

            Console.WriteLine("Listing Queues...");
            foreach (var queueDescription in queueDescriptions)
            {
                Console.WriteLine("\t{0}", queueDescription.Path);
            }
            Console.WriteLine("Done");
        }
コード例 #8
0
        public void ListQueues()
        {
            IEnumerable <QueueDescription> queueDescriptions = m_NamespaceManager.GetQueues();

            foreach (QueueDescription item in queueDescriptions)
            {
                Console.WriteLine("\t{0}", item.Path);
            }

            Console.WriteLine("Done!");
        }
コード例 #9
0
 public void Execute(DeleteAllBusEntititesCommand command)
 {
     foreach (var q in _namespaceManager.GetQueues().ToArray())
     {
         _namespaceManager.DeleteQueue(q.Path);
     }
     foreach (var t in _namespaceManager.GetTopics().ToArray())
     {
         _namespaceManager.DeleteTopic(t.Path);
     }
 }
コード例 #10
0
            public Dictionary <string, int> List()
            {
                Dictionary <string, int> queueList = new Dictionary <string, int>();

                NamespaceManager NM = NamespaceManager.CreateFromConnectionString(_ConStr);

                foreach (Microsoft.ServiceBus.Messaging.QueueDescription Q in NM.GetQueues())
                {
                    queueList.Add(Q.Path, (int)Q.MessageCount);
                }

                return(queueList);
            }
コード例 #11
0
        public AzureServiceBusMqServerAppHostTests()
        {
#if !NETCORE_SUPPORT
            NamespaceManager nm = NamespaceManager.CreateFromConnectionString(ConnectionString);
            Parallel.ForEach(nm.GetQueues(), qd =>
            {
                var sbClient        = QueueClient.CreateFromConnectionString(ConnectionString, qd.Path, ReceiveMode.ReceiveAndDelete);
                BrokeredMessage msg = null;
                while ((msg = sbClient.Receive(new TimeSpan(0, 0, 1))) != null)
                {
                }
            });
#endif
        }
コード例 #12
0
        private void ProcessQueues()
        {
            var queues            = _sourceNamespaceManager.GetQueues();
            var destinationQueues = _destinationNamespaceManager.GetQueues().Select(queue => queue.Path);

            _activityLogger.Log($"{queues.Count()} queue(s) found");

            foreach (var queue in queues)
            {
                if (IsQueueIgnored(queue.Path))
                {
                    _activityLogger.Log($"Ignoring queue: [{queue}]");
                }

                else if (!destinationQueues.Contains(queue.Path))
                {
                    _activityLogger.Log($"Skipping queue, which does not exist in destination: [{queue}]");
                }

                else
                {
                    QueueClient sourceClient      = null;
                    QueueClient destinationClient = null;

                    try
                    {
                        sourceClient      = QueueClient.CreateFromConnectionString(_sourceConnectionString, queue.Path);
                        destinationClient = QueueClient.CreateFromConnectionString(_destinationConnectionString, queue.Path);

                        if (queue.RequiresSession)
                        {
                            _queueMessageForwarder.ProcessSessionQueue(sourceClient, destinationClient);
                        }
                        else
                        {
                            _queueMessageForwarder.ProcessQueue(sourceClient, destinationClient);
                        }
                    }
                    catch (Exception e)
                    {
                        _activityLogger.Log($"! Exception processing [{queue.Path}] queue: {e.Message}\n\n", 0, 2);
                    }
                    finally
                    {
                        sourceClient?.Close();
                        destinationClient?.Close();
                    }
                }
            }
        }
コード例 #13
0
            public bool Exists()
            {
                NamespaceManager NM = NamespaceManager.CreateFromConnectionString(_ConStr);

                foreach (Microsoft.ServiceBus.Messaging.QueueDescription Q in NM.GetQueues())
                {
                    if (Q.Path.ToLower().Contains(_ReceivingQueue))
                    {
                        return(true);
                    }
                }

                return(false);
            }
コード例 #14
0
ファイル: Program.cs プロジェクト: BrentHS/Examples
        /// <summary>
        /// Creates the queue. If the queue already exists then nothing is done.
        /// </summary>
        /// <param name="nameSpaceManager">The name space manager.</param>
        /// <param name="queueName">Name of the queue.</param>
        public static void CreateQueue(NamespaceManager nameSpaceManager, string queueName)
        {
            if (!nameSpaceManager.QueueExists(queueName))
            {
                var qd = new QueueDescription(queueName)
                {
                    MaxSizeInMegabytes       = 5120,
                    DefaultMessageTimeToLive = new TimeSpan(0, 1, 0)
                                               //IsAnonymousAccessible = true
                };

                nameSpaceManager.CreateQueue(qd);
                nameSpaceManager.GetQueues();
            }
        }
コード例 #15
0
ファイル: TaskHubWorker.cs プロジェクト: suwatch/durabletask
        /// <summary>
        ///     Hub existence check.
        /// </summary>
        /// <returns>True if the Task Hub exists, false otherwise.</returns>
        public bool HubExists()
        {
            NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

            IEnumerable <QueueDescription> queueDescriptions =
                namespaceManager.GetQueues("startswith(path, '" + hubName + "') eq TRUE");

            if (!queueDescriptions.Where(q => string.Equals(q.Path, orchestratorEntityName)).Any())
            {
                return(false);
            }

            // TODO : what if not all of the hub entities exist?

            return(true);
        }
コード例 #16
0
        public static void RemoveEndpoint(string endpointName)
        {
            var serviceBusSettings = ConfigurationManager.GetSection(ServiceBusConfigurationSettings.SectionName) as ServiceBusConfigurationSettings;
            var serviceBusEndpoint = serviceBusSettings.Endpoints.Get(endpointName);

            if (serviceBusEndpoint != null)
            {
                var credentials      = TokenProvider.CreateSharedSecretTokenProvider(serviceBusEndpoint.IssuerName, serviceBusEndpoint.IssuerSecret);
                var address          = ServiceBusEnvironment.CreateServiceUri("sb", serviceBusEndpoint.ServiceNamespace, String.Empty);
                var managementClient = new NamespaceManager(address, credentials);

                if (!String.IsNullOrEmpty(serviceBusEndpoint.TopicName) && !String.IsNullOrEmpty(serviceBusEndpoint.SubscriptionName))
                {
                    if (managementClient.GetTopics().Where(t => String.Compare(t.Path, serviceBusEndpoint.TopicName, true) == 0).Count() > 0)
                    {
                        if (managementClient.GetSubscriptions(serviceBusEndpoint.TopicName).Where(s => String.Compare(s.Name, serviceBusEndpoint.SubscriptionName, true) == 0).Count() > 0)
                        {
                            managementClient.DeleteSubscription(serviceBusEndpoint.TopicName, serviceBusEndpoint.SubscriptionName);
                            return;
                        }
                    }
                }

                if (!String.IsNullOrEmpty(serviceBusEndpoint.TopicName))
                {
                    if (managementClient.GetTopics().Where(t => String.Compare(t.Path, serviceBusEndpoint.TopicName, true) == 0).Count() > 0)
                    {
                        managementClient.DeleteTopic(serviceBusEndpoint.TopicName);
                        return;
                    }
                }

                if (!String.IsNullOrEmpty(serviceBusEndpoint.QueueName))
                {
                    if (managementClient.GetQueues().Where(q => String.Compare(q.Path, serviceBusEndpoint.QueueName, true) == 0).Count() > 0)
                    {
                        managementClient.DeleteQueue(serviceBusEndpoint.QueueName);
                        return;
                    }
                }
            }
        }
コード例 #17
0
        public void Execute(DeleteAllDeadLettersCommand command)
        {
            var topics = _namespaceManager.GetTopics().ToArray();

            foreach (var topic in topics)
            {
                var subscriptions = _namespaceManager.GetSubscriptions(topic.Path);
                foreach (var subscription in subscriptions)
                {
                    _requeueAndRemove.RemoveAll(topic.Path, subscription.Name + DeadLetterQueueSuffix);
                }
            }

            var queues = _namespaceManager.GetQueues().ToArray();

            foreach (var queue in queues)
            {
                _requeueAndRemove.RemoveAll(queue.Path + DeadLetterQueueSuffix);
            }
        }
コード例 #18
0
        public void ListQueues(Property[] inputs, RequiredProperties required, Property[] returns, MethodType methodType, ServiceObject serviceObject)
        {
            Utilities.ServiceUtilities serviceUtilities = new Utilities.ServiceUtilities(serviceBroker);
            serviceObject.Properties.InitResultTable();
            NamespaceManager namespaceManager = null;

            System.Data.DataRow dr;
            try
            {
                namespaceManager = serviceUtilities.GetNamespaceManager(inputs.Where(p => p.Name.Equals("requesttimeout")).FirstOrDefault());
                IEnumerable <QueueDescription> Qs = namespaceManager.GetQueues();

                foreach (QueueDescription Queue in Qs)
                {
                    dr = serviceBroker.ServicePackage.ResultTable.NewRow();
                    foreach (Property prop in returns)
                    {
                        switch (prop.Name)
                        {
                        case "defaultmessagetimetolive":
                            dr[prop.Name] = Queue.DefaultMessageTimeToLive.TotalSeconds;
                            break;

                        case "duplicatedetectionhistorytimewindow":
                            dr[prop.Name] = Queue.DuplicateDetectionHistoryTimeWindow.TotalSeconds;
                            break;

                        case "enablebatchedoperations":
                            prop.Value = Queue.EnableBatchedOperations;
                            break;

                        case "enabledeadletteringonmessageexpiration":
                            dr[prop.Name] = Queue.EnableDeadLetteringOnMessageExpiration;
                            break;

                        case "isreadonly":
                            dr[prop.Name] = Queue.IsReadOnly;
                            break;

                        case "lockduration":
                            dr[prop.Name] = Queue.LockDuration.TotalSeconds;
                            break;

                        case "maxdeliverycount":
                            dr[prop.Name] = Queue.MaxDeliveryCount;
                            break;

                        case "maxsizeinmegabytes":
                            dr[prop.Name] = Queue.MaxSizeInMegabytes;
                            break;

                        case "messagecount":
                            dr[prop.Name] = Queue.MessageCount;
                            break;

                        case "queue":
                            dr[prop.Name] = Queue.Path;
                            break;

                        case "requiresduplicatedetection":
                            dr[prop.Name] = Queue.RequiresDuplicateDetection;
                            break;

                        case "requiressession":
                            dr[prop.Name] = Queue.RequiresSession;
                            break;

                        case "sizeinbytes":
                            dr[prop.Name] = Queue.SizeInBytes;
                            break;
                        }
                    }
                    dr["responsestatus"]            = ResponseStatus.Success;
                    dr["responsestatusdescription"] = "Queues listed";
                    serviceBroker.ServicePackage.ResultTable.Rows.Add(dr);
                }
            }
            catch (Exception ex)
            {
                dr = serviceBroker.ServicePackage.ResultTable.NewRow();
                dr["responsestatus"]            = ResponseStatus.Error;
                dr["responsestatusdescription"] = ex.Message;
                serviceBroker.ServicePackage.ResultTable.Rows.Add(dr);
                return;
            }
            finally
            {
                namespaceManager = null;
            }
        }
コード例 #19
0
        private List <ExtendedAuthorizationRule> GetAuthorizationRulesToFilter(AuthorizationRuleFilterOption options)
        {
            if (!string.IsNullOrEmpty(options.EntityName))
            {
                return(GetAuthorizationRuleCore(
                           options.Namespace,
                           options.EntityName,
                           options.EntityType,
                           r => true));
            }
            else if (options.EntityTypes != null && options.EntityTypes.Count > 0)
            {
                NamespaceManager namespaceManager      = CreateNamespaceManager(options.Namespace);
                List <ExtendedAuthorizationRule> rules = new List <ExtendedAuthorizationRule>();
                options.EntityTypes = options.EntityTypes.Distinct().ToList();

                foreach (ServiceBusEntityType type in options.EntityTypes)
                {
                    switch (type)
                    {
                    case ServiceBusEntityType.Queue:
                        rules.AddRange(namespaceManager.GetQueues()
                                       .SelectMany(e => e.Authorization
                                                   .Select(r => CreateExtendedAuthorizationRule(
                                                               r,
                                                               options.Namespace,
                                                               e.Path,
                                                               ServiceBusEntityType.Queue))));
                        break;

                    case ServiceBusEntityType.Topic:
                        rules.AddRange(namespaceManager.GetTopics()
                                       .SelectMany(e => e.Authorization
                                                   .Select(r => CreateExtendedAuthorizationRule(
                                                               r,
                                                               options.Namespace,
                                                               e.Path,
                                                               ServiceBusEntityType.Topic))));
                        break;

                    case ServiceBusEntityType.Relay:
                        rules.AddRange(namespaceManager.GetRelaysAsync().Result
                                       .SelectMany(e => e.Authorization
                                                   .Select(r => CreateExtendedAuthorizationRule(
                                                               r,
                                                               options.Namespace,
                                                               e.Path,
                                                               ServiceBusEntityType.Relay))));
                        break;

                    case ServiceBusEntityType.NotificationHub:
                        rules.AddRange(namespaceManager.GetNotificationHubs()
                                       .SelectMany(e => e.Authorization
                                                   .Select(r => CreateExtendedAuthorizationRule(
                                                               r,
                                                               options.Namespace,
                                                               e.Path,
                                                               ServiceBusEntityType.NotificationHub))));
                        break;

                    default: throw new InvalidOperationException();
                    }
                }

                return(rules);
            }
            else
            {
                return(ServiceBusClient.Namespaces.ListAuthorizationRules(options.Namespace)
                       .AuthorizationRules
                       .Select(ar => ar.ToSharedAccessAuthorizationRule())
                       .Select(r => CreateExtendedAuthorizationRule(r, options.Namespace))
                       .ToList());
            }
        }
コード例 #20
0
ファイル: Program.cs プロジェクト: BrentHS/Examples
        public static IEnumerable <QueueDescription> GetQueues(NamespaceManager nameSpaceManager)
        {
            var queues = nameSpaceManager.GetQueues();

            return(queues);
        }
コード例 #21
0
ファイル: BusBuilder.cs プロジェクト: nhuhuynh/Nimbus
        /// <summary>
        ///     Danger! Danger, Will Robinson!
        /// </summary>
        private static void RemoveAllExistingNamespaceElements(NamespaceManager namespaceManager, ILogger logger)
        {
            logger.Debug("Removing all existing namespace elements. IMPORTANT: This should only be done in your regression test suites.");

            var tasks = new List<Task>();
            var queuePaths = namespaceManager.GetQueues().Select(q => q.Path).ToArray();
            queuePaths
                .Do(queuePath => tasks.Add(Task.Run(() => namespaceManager.DeleteQueue(queuePath))))
                .Done();

            var topicPaths = namespaceManager.GetTopics().Select(t => t.Path).ToArray();
            topicPaths
                .Do(topicPath => tasks.Add(Task.Run(() => namespaceManager.DeleteTopic(topicPath))))
                .Done();

            tasks.WaitAll();
        }
コード例 #22
0
ファイル: BusBuilder.cs プロジェクト: nblumhardt/Nimbus
        /// <summary>
        ///     Danger! Danger, Will Robinson!
        /// </summary>
        private static void RemoveAllExistingNamespaceElements(NamespaceManager namespaceManager)
        {
            var tasks = new List<Task>();

            var queuePaths = namespaceManager.GetQueues().Select(q => q.Path).ToArray();
            queuePaths
                .Do(queuePath => tasks.Add(Task.Run(() => namespaceManager.DeleteQueue(queuePath))))
                .Done();

            var topicPaths = namespaceManager.GetTopics().Select(t => t.Path).ToArray();
            topicPaths
                .Do(topicPath => tasks.Add(Task.Run(() => namespaceManager.DeleteTopic(topicPath))))
                .Done();

            tasks.WaitAll();
        }
コード例 #23
0
 public IEnumerable <QueueDescription> ListQueues()
 {
     return(_servicebusNamespaceManager.GetQueues());
 }