コード例 #1
0
        private IList <SbSubscription> BuildSubscriptionList(ISbManager sbManager, string TopicName, string SubscriptionName)
        {
            IList <SbSubscription>          result        = new List <SbSubscription>();
            IList <SubscriptionDescription> subscriptions = new List <SubscriptionDescription>();

            if (SubscriptionName != null)
            {
                subscriptions.Add(sbManager.GetSubscriptionByName(TopicName, SubscriptionName));
            }
            else
            {
                subscriptions = sbManager.GetAllSubscriptions(TopicName);
            }

            foreach (var subscription in subscriptions)
            {
                SubscriptionRuntimeInfo subscriptionRuntimeInfo = sbManager.GetSubscriptionRuntimeInfo(TopicName, subscription.SubscriptionName);

                result.Add(new SbSubscription
                {
                    Name                 = subscription.SubscriptionName,
                    Topic                = subscription.TopicPath,
                    ActiveMessages       = subscriptionRuntimeInfo.MessageCountDetails.ActiveMessageCount,
                    DeadLetteredMessages = subscriptionRuntimeInfo.MessageCountDetails.DeadLetterMessageCount
                });
            }

            return(result);
        }
        public async Task GetSubscriptionRuntimeInfoTest()
        {
            var topicName        = nameof(GetSubscriptionRuntimeInfoTest).ToLower() + Guid.NewGuid().ToString("D").Substring(0, 8);
            var subscriptionName = Guid.NewGuid().ToString("D").Substring(0, 8);
            var mgmtClient       = new ServiceBusManagementClient(TestEnvironment.ServiceBusConnectionString);

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

            TopicDescription topicDescription = await mgmtClient.CreateTopicAsync(topicName);

            // Changing Last Updated Time
            topicDescription.AutoDeleteOnIdle = TimeSpan.FromMinutes(100);
            await mgmtClient.UpdateTopicAsync(topicDescription);

            SubscriptionDescription subscriptionDescription = await mgmtClient.CreateSubscriptionAsync(topicName, subscriptionName);

            // Changing Last Updated Time for subscription
            subscriptionDescription.AutoDeleteOnIdle = TimeSpan.FromMinutes(100);
            await mgmtClient.UpdateSubscriptionAsync(subscriptionDescription);

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

            ServiceBusSender sender = sbClient.CreateSender(topicName);
            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(topicName, subscriptionName);
            ServiceBusReceivedMessage msg      = await receiver.ReceiveAsync();

            await receiver.DeadLetterAsync(msg.LockToken);

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

            await foreach (SubscriptionRuntimeInfo subscriptionRuntimeInfo in mgmtClient.GetSubscriptionsRuntimeInfoAsync(topicName))
            {
                runtimeInfoList.Add(subscriptionRuntimeInfo);
            }
            runtimeInfoList = runtimeInfoList.Where(e => e.TopicName.StartsWith(nameof(GetSubscriptionRuntimeInfoTest).ToLower())).ToList();
            Assert.True(runtimeInfoList.Count == 1, $"Expected 1 subscription but {runtimeInfoList.Count} subscriptions returned");
            SubscriptionRuntimeInfo runtimeInfo = runtimeInfoList.First();

            Assert.NotNull(runtimeInfo);

            Assert.AreEqual(topicName, runtimeInfo.TopicName);
            Assert.AreEqual(subscriptionName, runtimeInfo.SubscriptionName);

            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(0, runtimeInfo.CountDetails.ScheduledMessageCount);
            Assert.AreEqual(2, runtimeInfo.MessageCount);

            SubscriptionRuntimeInfo singleRuntimeInfo = await mgmtClient.GetSubscriptionRuntimeInfoAsync(topicName, subscriptionName);

            Assert.AreEqual(runtimeInfo.CreatedAt, singleRuntimeInfo.CreatedAt);
            Assert.AreEqual(runtimeInfo.AccessedAt, singleRuntimeInfo.AccessedAt);
            Assert.AreEqual(runtimeInfo.UpdatedAt, singleRuntimeInfo.UpdatedAt);
            Assert.AreEqual(runtimeInfo.SubscriptionName, singleRuntimeInfo.SubscriptionName);
            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.TopicName, singleRuntimeInfo.TopicName);

            await mgmtClient.DeleteTopicAsync(topicName);
        }
コード例 #3
0
 public ServiceBusSubscription(SubscriptionRuntimeInfo subscription)
     : base(subscription.MessageCountDetails.ActiveMessageCount, subscription.MessageCountDetails.DeadLetterMessageCount)
 {
     Name = subscription.SubscriptionName;
 }