从 ASP.NET Core 2.0 控制台应用程序监控 Azure 服务总线队列深度
Monitoring Azure Service Bus Queue Depth from ASP.NET Core 2.0 Console App
我正在尝试从 ASP.NET Core 2.0 控制台应用程序监视总队列深度和 DeadLetterMessages 队列深度。我看到过使用 NamespaceManager class 的引用,像这样:
var ns = NamespaceManager.CreateFromConnectionString(sbConnectionString);
var queue = ns.GetQueue(queueName);
var count = queue.MessageCount;
var deadletterMessagesCount = queue.MessageCountDetails.DeadletterMessageCount;
(来自 )
但是 NamespaceManager 在 Microsoft.ServiceBus 中,它与 ASP.NET Core 不兼容。
关于如何获取消息计数有什么建议吗?
Any suggestions on how to get the message count?
正如 Mikhail 提到的,目前 Microsoft.Azure.ServiceBus 不支持。
如果你想在 .net core 平台上使用 Azure SDK 获取消息计数,我建议你可以使用 Microsoft.Azure.Management.Fluent 来实现。
下面是演示代码
//auth file:c:\tom\azureCredential.txt
var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"c:\tom\azureCredential.txt");
var azure = Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(credentials)
.WithDefaultSubscription();
var serviceBus = azure.ServiceBusNamespaces.GetByResourceGroup("Resource group name", "servicebus namespace");
var queue = serviceBus.Queues.GetByName("queueName");
var activeMessageCount = queue.ActiveMessageCount;
var deadletterCount = queue.DeadLetterMessageCount;
注意: queue.MessageCount
是包括DeadLetterMessage在内的所有消息的编号。
如何create an Azure Active Directory application and assign application to role.
如何创建授权文件请参考auth file formats
subscription=########-####-####-####-############
client=########-####-####-####-############
tenant=########-####-####-####-############
key=XXXXXXXXXXXXXXXX
managementURI=https\://management.core.windows.net/
baseURL=https\://management.azure.com/
authURL=https\://login.windows.net/
graphURL=https\://graph.windows.net/
测试结果:
使用 Azure.Messaging.ServiceBus
库中的 Azure.Messaging.ServiceBus.Administration
命名空间。
像这样设置一个新的管理客户端:
var client = new ServiceBusAdministrationClient("connectionstring");
然后像这样获取消息 count/depth:
var queuesRuntimeProperties = client.GetQueuesRuntimePropertiesAsync().AsPages();
await foreach (var queuePage in queuesRuntimeProperties)
{
foreach (Azure.Messaging.ServiceBus.Administration.QueueRuntimeProperties currentQueue in queuePage.Values)
{
dict.Add(currentQueue.Name, currentQueue.TotalMessageCount.ToString());
}
}
我正在尝试从 ASP.NET Core 2.0 控制台应用程序监视总队列深度和 DeadLetterMessages 队列深度。我看到过使用 NamespaceManager class 的引用,像这样:
var ns = NamespaceManager.CreateFromConnectionString(sbConnectionString);
var queue = ns.GetQueue(queueName);
var count = queue.MessageCount;
var deadletterMessagesCount = queue.MessageCountDetails.DeadletterMessageCount;
(来自
但是 NamespaceManager 在 Microsoft.ServiceBus 中,它与 ASP.NET Core 不兼容。
关于如何获取消息计数有什么建议吗?
Any suggestions on how to get the message count?
正如 Mikhail 提到的,目前 Microsoft.Azure.ServiceBus 不支持。
如果你想在 .net core 平台上使用 Azure SDK 获取消息计数,我建议你可以使用 Microsoft.Azure.Management.Fluent 来实现。
下面是演示代码
//auth file:c:\tom\azureCredential.txt
var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"c:\tom\azureCredential.txt");
var azure = Azure
.Configure()
.WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
.Authenticate(credentials)
.WithDefaultSubscription();
var serviceBus = azure.ServiceBusNamespaces.GetByResourceGroup("Resource group name", "servicebus namespace");
var queue = serviceBus.Queues.GetByName("queueName");
var activeMessageCount = queue.ActiveMessageCount;
var deadletterCount = queue.DeadLetterMessageCount;
注意: queue.MessageCount
是包括DeadLetterMessage在内的所有消息的编号。
如何create an Azure Active Directory application and assign application to role.
如何创建授权文件请参考auth file formats
subscription=########-####-####-####-############
client=########-####-####-####-############
tenant=########-####-####-####-############
key=XXXXXXXXXXXXXXXX
managementURI=https\://management.core.windows.net/
baseURL=https\://management.azure.com/
authURL=https\://login.windows.net/
graphURL=https\://graph.windows.net/
测试结果:
使用 Azure.Messaging.ServiceBus
库中的 Azure.Messaging.ServiceBus.Administration
命名空间。
像这样设置一个新的管理客户端:
var client = new ServiceBusAdministrationClient("connectionstring");
然后像这样获取消息 count/depth:
var queuesRuntimeProperties = client.GetQueuesRuntimePropertiesAsync().AsPages();
await foreach (var queuePage in queuesRuntimeProperties)
{
foreach (Azure.Messaging.ServiceBus.Administration.QueueRuntimeProperties currentQueue in queuePage.Values)
{
dict.Add(currentQueue.Name, currentQueue.TotalMessageCount.ToString());
}
}