4

Azure Service Bus のトピックとサブスクリプションを監視するユーティリティを作成しています。

名前、キューに入れられたメッセージ数、配信不能メッセージ数などのトピックの詳細を取得できますが、処理されたメッセージの数を取得したいと考えています。

私が使用しているコードは次のとおりです。

var sub = namespaceManager.GetSubscription(topicPath, subscriptionName);

var name = sub.Name;
var pending= sub.MessageCountDetails.ActiveMessageCount;
var deadletter = sub.MessageCountDetails.DeadLetterMessageCount

GetSubscription処理されたメッセージの数を取得するためのプロパティが含まれていないようです。

誰もこれをやろうとしたことがありますか?

4

3 に答える 3

3

Azure Servicebus エンティティからメッセージの統計情報を取得するには、Visual Studio App Insightsを使用します。アプリを監視するツールです。基本的に、アプリはイベントを App Insights に送信し、Azure ポータルから、アプリに関するリアルタイムの情報を提供するダッシュボードを作成できます。

Azure Servicebus エンティティを監視するために、アプリからカスタム イベントを送信します。

  • 価格を確認できます。月に最大 500 万件のカスタム イベントを送信できる無料プランがあります。500 万を超えるイベントを送信する必要がある場合は、イベントを App Insights に送信する前に、Servicebus エンティティまたは集計カウントごとに App Insights を作成できます。
  • 生データには 7 日間、集計データには 90 日間アクセスできます。

  • Power BI を使用している場合は、データの継続的なエクスポートを構成できます (無料プランで利用できるとは思わないでください)。

  • その他の優れた機能として、例外を送信し、App Insigthsで例外が受信されるたびに電子メールを送信するアラートを App Insigths から作成できます。

Web ジョブ/ワーカー ロール/コンソール アプリ/Windows サービスからのサービスバス メッセージを処理する場合は、この記事が出発点になる可能性があります。

したがって、Azure portal から App Insights を作成すると、InstrumentationKeyが取得されます。

nuget からApplicationInsightsをインストールできます。

イベントを App Insights に送信するには、TelemetryClient. Microsoft では、アプリごとにテレメトリ クライアントのインスタンスを 1 回だけ使用し、アプリが停止または再起動したときに 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 分ごとに 1 つのイベントを送信し、MessageCount をこの間隔で処理されるメッセージの数に設定できるため、メトリクスを使用します。

ここではアプリ インサイトを使用していますが、次のような他のツールでも同じことができると確信しています。

これがあなたを助けることを願っています!

于 2016-07-21T10:19:54.837 に答える
0

エンティティの作成以降に処理されたメッセージの数? それとも特定の日から?また、クライアントが時間内に完了できなかったり、その他の理由で複数回処理された (配信回数が 1 回を超えた) メッセージはどうなるでしょうか。このカウントは簡単ではないため、そのままでは使用できません。

于 2016-07-20T06:55:16.523 に答える