Azure 服务总线 - 订阅消息查看
Azure Service Bus - Message Peek on Subscription
我在 Topic/Subscription 上有 Azure 服务总线的侦听权限。有没有办法验证订阅是否有消息以及有多少消息。我没有管理连接字符串,我想我不能 运行 Service Bus Explorer。我不打算从订阅中读取消息。
I don't intent to read the message out of the subscription.
简短的回答是否。 需要管理 访问权限才能获取主题或订阅消息信息。
如果想获取订阅消息数,可以尝试以下两种方式:
1.You 具有 管理 访问权限,您可以使用以下演示代码来执行此操作。
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.Use Azure Microsoft.Azure.Management.ServiceBus.Fluent SDK。您需要注册 Azure AD 应用程序并为其分配相应的角色。更多信息请参考另一个.
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;
主题订阅中的消息数只能使用管理连接字符串检索。使用 Listen Connection 字符串,您无法读取消息的属性或计数。
但是,您可以使用监听连接字符串查看订阅中的消息。查看消息不会锁定或从订阅中删除消息。您可以根据需要多次查看消息。
因此,借助 Listen Connection 字符串,您可以通过在 while
循环中一条一条地查看消息并在其中添加一个 counter
来找到订阅中的消息数环形。计数器值是订阅内的消息数。
我在 Topic/Subscription 上有 Azure 服务总线的侦听权限。有没有办法验证订阅是否有消息以及有多少消息。我没有管理连接字符串,我想我不能 运行 Service Bus Explorer。我不打算从订阅中读取消息。
I don't intent to read the message out of the subscription.
简短的回答是否。 需要管理 访问权限才能获取主题或订阅消息信息。
如果想获取订阅消息数,可以尝试以下两种方式:
1.You 具有 管理 访问权限,您可以使用以下演示代码来执行此操作。
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.Use Azure Microsoft.Azure.Management.ServiceBus.Fluent SDK。您需要注册 Azure AD 应用程序并为其分配相应的角色。更多信息请参考另一个
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;
主题订阅中的消息数只能使用管理连接字符串检索。使用 Listen Connection 字符串,您无法读取消息的属性或计数。
但是,您可以使用监听连接字符串查看订阅中的消息。查看消息不会锁定或从订阅中删除消息。您可以根据需要多次查看消息。
因此,借助 Listen Connection 字符串,您可以通过在 while
循环中一条一条地查看消息并在其中添加一个 counter
来找到订阅中的消息数环形。计数器值是订阅内的消息数。