Example #1
0
        private IList <SbQueue> BuildQueueList(ISbManager SbManager, string QueueName)
        {
            IList <SbQueue>          result = new List <SbQueue>();
            IList <QueueDescription> queues = new List <QueueDescription>();

            if (QueueName != null)
            {
                queues.Add(SbManager.GetQueueByName(QueueName));
            }
            else
            {
                queues = SbManager.GetAllQueues();
            }

            foreach (var queue in queues)
            {
                QueueRuntimeInfo queueRuntimeInfo = SbManager.GetQueueRuntimeInfo(queue.Path);

                result.Add(new SbQueue
                {
                    Name                  = queue.Path,
                    ActiveMessages        = queueRuntimeInfo.MessageCountDetails.ActiveMessageCount,
                    DeadLetteredMessages  = queueRuntimeInfo.MessageCountDetails.DeadLetterMessageCount,
                    ScheduledMessageCount = queueRuntimeInfo.MessageCountDetails.ScheduledMessageCount
                });
            }

            return(result);
        }
        public async Task <long> GetMessageCountAsync(string channelName, CancellationToken cancellationToken = default)
        {
            if (channelName is null)
            {
                throw new ArgumentNullException(nameof(channelName));
            }

            Decompose(channelName, out string entityPath, out bool isQueue);

            if (isQueue)
            {
                try
                {
                    QueueRuntimeInfo qinfo = await _mgmt.GetQueueRuntimeInfoAsync(entityPath, cancellationToken).ConfigureAwait(false);

                    return(qinfo.MessageCount);
                }
                catch (MessagingEntityNotFoundException)
                {
                    return(0);
                }
            }

            DecomposeSubscription(channelName, out string topicPath, out string subscriptionName);
            throw new NotSupportedException();

            /*try
             * {
             * SubscriptionRuntimeInfo info = await _mgmt.GetSubscriptionRuntimeInfoAsync(topicPath, subscriptionName, cancellationToken).ConfigureAwait(false);
             * return info.MessageCount;
             * }
             * catch(MessagingEntityNotFoundException)
             * {
             * return 0;
             * }*/
        }
        public async Task GetQueueRuntimeInfo()
        {
            var queueName  = nameof(GetQueueRuntimeInfo).ToLower() + Guid.NewGuid().ToString("D").Substring(0, 8);
            var mgmtClient = new ServiceBusManagementClient(TestEnvironment.ServiceBusConnectionString);

            await using var sbClient = new ServiceBusClient(TestEnvironment.ServiceBusConnectionString);

            QueueDescription description = await mgmtClient.CreateQueueAsync(queueName);

            // Changing Last Updated Time
            description.AutoDeleteOnIdle = TimeSpan.FromMinutes(100);
            QueueDescription updatedQueue = await mgmtClient.UpdateQueueAsync(description);

            // Populating 1 active message, 1 dead letter message and 1 scheduled message
            // Changing Last Accessed Time

            ServiceBusSender sender = sbClient.CreateSender(queueName);
            await sender.SendAsync(new ServiceBusMessage()
            {
                MessageId = "1"
            });

            await sender.SendAsync(new ServiceBusMessage()
            {
                MessageId = "2"
            });

            await sender.SendAsync(new ServiceBusMessage()
            {
                MessageId = "3", ScheduledEnqueueTime = DateTime.UtcNow.AddDays(1)
            });

            ServiceBusReceiver        receiver = sbClient.CreateReceiver(queueName);
            ServiceBusReceivedMessage msg      = await receiver.ReceiveAsync();

            await receiver.DeadLetterAsync(msg.LockToken);

            List <QueueRuntimeInfo> runtimeInfoList = new List <QueueRuntimeInfo>();

            await foreach (QueueRuntimeInfo queueRuntimeInfo in mgmtClient.GetQueuesRuntimeInfoAsync())
            {
                runtimeInfoList.Add(queueRuntimeInfo);
            }
            runtimeInfoList = runtimeInfoList.Where(e => e.Name.StartsWith(nameof(GetQueueRuntimeInfo).ToLower())).ToList();
            Assert.True(runtimeInfoList.Count == 1, $"Expected 1 queue but {runtimeInfoList.Count} queues returned");
            QueueRuntimeInfo runtimeInfo = runtimeInfoList.First();

            Assert.NotNull(runtimeInfo);

            Assert.AreEqual(queueName, runtimeInfo.Name);
            Assert.True(runtimeInfo.CreatedAt < runtimeInfo.UpdatedAt);
            Assert.True(runtimeInfo.UpdatedAt < runtimeInfo.AccessedAt);
            Assert.AreEqual(1, runtimeInfo.CountDetails.ActiveMessageCount);
            Assert.AreEqual(1, runtimeInfo.CountDetails.DeadLetterMessageCount);
            Assert.AreEqual(1, runtimeInfo.CountDetails.ScheduledMessageCount);
            Assert.AreEqual(3, runtimeInfo.MessageCount);
            Assert.True(runtimeInfo.SizeInBytes > 0);

            QueueRuntimeInfo singleRuntimeInfo = await mgmtClient.GetQueueRuntimeInfoAsync(runtimeInfo.Name);

            Assert.AreEqual(runtimeInfo.AccessedAt, singleRuntimeInfo.AccessedAt);
            Assert.AreEqual(runtimeInfo.CreatedAt, singleRuntimeInfo.CreatedAt);
            Assert.AreEqual(runtimeInfo.UpdatedAt, singleRuntimeInfo.UpdatedAt);
            Assert.AreEqual(runtimeInfo.MessageCount, singleRuntimeInfo.MessageCount);
            Assert.AreEqual(runtimeInfo.CountDetails.ActiveMessageCount, singleRuntimeInfo.CountDetails.ActiveMessageCount);
            Assert.AreEqual(runtimeInfo.CountDetails.DeadLetterMessageCount, singleRuntimeInfo.CountDetails.DeadLetterMessageCount);
            Assert.AreEqual(runtimeInfo.CountDetails.ScheduledMessageCount, singleRuntimeInfo.CountDetails.ScheduledMessageCount);
            Assert.AreEqual(runtimeInfo.SizeInBytes, singleRuntimeInfo.SizeInBytes);

            await mgmtClient.DeleteQueueAsync(queueName);
        }
 public ServiceBusQueue(QueueRuntimeInfo runtimeInfo)
     : base(runtimeInfo.MessageCountDetails.ActiveMessageCount, runtimeInfo.MessageCountDetails.DeadLetterMessageCount)
 {
 }