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); }
public ServiceBusSubscription(SubscriptionRuntimeInfo subscription) : base(subscription.MessageCountDetails.ActiveMessageCount, subscription.MessageCountDetails.DeadLetterMessageCount) { Name = subscription.SubscriptionName; }