在Azure Service Bus中获取消息统计信息

我正在编写一个实用程序来监视我们的Azure服务总线主题和订阅。

我可以获取主题详细信息,例如名称,排队消息计数和死信消息计数,但我想获取已处理的消息数。

这是我正在使用的代码:

var sub = namespaceManager.GetSubscription(topicPath, subscriptionName); var name = sub.Name; var pending= sub.MessageCountDetails.ActiveMessageCount; var deadletter = sub.MessageCountDetails.DeadLetterMessageCount 

似乎GetSubscription不包含任何属性来获取处理的消息数。

有没有人试过这样做呢?

借助最新的Azure监视器度量标准 ,可以获取主题,传入消息,传出消息中的消息总数。 在您的情况下,外发邮件的数量将是已处理邮件的数量。

要从Azure Servicebus实体获取消息统计信息,我使用Visual Studio App Insights 。 这是一个监控应用程序的工具。 基本上,您的应用程序将事件发送到App Insights,从Azure门户,您可以创建仪表板 ,为您提供有关您的应用程序的实时信息。

要监控Azure Servicebus实体,我从我的应用程序发送自定义事件:

  • 您可以查看定价 ,有一个免费的计划,允许您每月发送多达500万个自定义事件。 如果您需要发送超过500万个事件,则可以在将事件发送到App Insights之前为每个Servicebus实体或聚合计数创建App Insights。
  • 您可以访问7天的原始数据并将数据汇总90天。

  • 如果使用Power BI,则可以配置数据的连续导出 (不要认为它在免费计划中可用)。

  • 其他很酷的事情,您可以发送exception并从App Insigths创建警报,在向App Insigths收到exception时向您发送电子邮件。

如果您从webjob / worker角色/控制台app / windows服务处理servicebus消息,本文可能是一个神的起点:

  • 监控Windows桌面应用程序的使用情况和性能

因此,在从Azure门户创建App Insights后,您将获得InstrumentationKey

您可以从nuget安装ApplicationInsights 。

要将事件发送到App Insights,您需要实例化TelemetryClient 。 Microsoft建议每个应用程序只有一次遥测客户端实例,并在应用程序停止或重新启动时刷新TelemetryClient:

 var telemetryClient = new TelemetryClient() { InstrumentationKey = "MyInstrumentationKey" }; 

所以这是一个非常基本的例子,但你会明白这一点:

 // Get the message BrokeredMessage message = ... try { // Process you message ... // Delete the message from the queue when it is ok. message.Complete(); // Create and send an event to app insights var eventTelemetry = new EventTelemetry { Name = "MyQueueName" }; eventTelemetry.Metrics["MessageCount"] = 1; telemetryClient.TrackEvent(eventTelemetry); } catch (Exception ex) { // Send back the message to the queue ??? depends if you'd like to re-process it message.Abandon(); // Send the exception to app insights telemetryClient.TrackException(ex); } 

使用此代码,您将在App Insights中创建一个名为MyQueueName的新事件。 您可以创建仪表板并对此事件进行过滤,并显示MessageCount指标。 我使用度量标准,因为在更复杂的情况下,您可以每x分钟发送一个事件,并将MessageCount设置为在此时间间隔内处理的消息数。

在这里,我使用的是App见解,但我很确定你可以使用其他工具做同样的事情:

  • 新遗物或
  • 射线枪

希望对你有帮助 !

自创建实体以来处理的消息数量? 还是从某个日期开始? 那么多次处理的消息(交付次数> 1)又是什么呢?因为客户端未能按时或其他原因完成? 这个计数并不是直接的,这就是开箱即用的原因。