Azure服务总线 - 订阅消息

问题描述 投票:0回答:2

我有Azure Service Bus主题/订阅的监听访问权限。有没有办法验证订阅是否有消息以及有多少消息。我没有管理连接字符串,我想我无法运行Service Bus Explorer。我无意阅读订阅中的消息。

azure azureservicebus azure-servicebus-topics service-bus-explorer
2个回答
1
投票

我无意阅读订阅中的消息。

最简洁的答案是不。获取主题或订阅消息信息需要管理访问权限。

如果您想获得订阅消息计数,可以尝试以下两种方式:

1.您具有管理访问权限,您可以使用以下演示代码来执行此操作。

var topicName = "topic1";
var subscriptionName = "subscription";
var address = "sb://xxx.servicebus.windows.net/"; //base address of namespace you are connecting to.
MessagingFactorySettings MsgFactorySettings = new MessagingFactorySettings
 {
     TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("SharedAccessKeyName", "xxxxxx"),
 };
MessagingFactory msgFactory = MessagingFactory.Create(address, MsgFactorySettings);
NamespaceManager manager = new NamespaceManager(msgFactory.Address,msgFactory.GetSettings().TokenProvider);
var subscriptioncDescription = manager.GetSubscription(topicName, subscriptionName);
var count = subscriptioncDescription.MessageCountDetails.ActiveMessageCount;

2.使用Azure Microsoft.Azure.Management.ServiceBus.Fluent sdk。您需要注册Azure AD应用程序并分配相应的角色。欲了解更多信息,请参阅另一个SO thread

 var subscriptionId = "Azure subscriptionId";
 var resourceGroupName = "rgName";
 var nameSpace = "tomtestsb";
 var topicName = "topic1";
 var subscriptionName = "subscription";
 var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"D:\Tom\Documents\azureCred.txt");
 var client = new ServiceBusManagementClient(credentials);
 client.SubscriptionId = subscriptionId;
 var topic = client.Topics.GetAsync(resourceGroupName, nameSpace, topicName).Result;
 var topicMessagecount = topic.CountDetails.ActiveMessageCount;
 var subscription = client.Subscriptions.GetAsync(resourceGroupName, nameSpace, topicName, subscriptionName).Result;
 var subscriptionMessagecount = subscription.CountDetails.ActiveMessageCount;

1
投票

只能使用“管理连接”字符串检索主题订阅中的消息计数。使用Listen Connection字符串,您无法读取消息的属性或计数。

但是,您可以使用侦听连接字符串查看订阅中的消息。查看邮件不会锁定或删除订阅中的邮件。您可以根据需要多次查看消息。

因此,在Listen Connection字符串的帮助下,您可以通过在while循环内逐个查看消息并在循环内添加counter来查找订阅中的消息数。计数器值是订阅内的消息数。

© www.soinside.com 2019 - 2024. All rights reserved.