AppDynamics .NET エージェントは、インストゥルメント化されたティアが MSMQ または RabbitMQ のトランスポートで NServiceBus へのコールを行うと、NServiceBus バックエンドへのイグジットポイントを自動検出します。エージェントは、NServiceBus バージョン 5 以降でダウンストリーム相関の NServiceBus エントリポイントを検出します。

NServiceBus Backend Diagram

イグジットポイントとバックエンドの命名

NServiceBus イグジットポイントは、アップストリームティアからキューにメッセージをパブリッシュまたはプッシュするメソッドです。エージェントは、NServiceBus バージョンやスレディングアーキテクチャに関係なく、イグジットポイントを検出します。システムから返されたキュー名が、エージェントによりキューに命名されます。 

シングルスレッドアーキテクチャのエントリーポイント

NServiceBus エントリポイントは、キュー内の新しいメッセージをリッスンまたはポーリングするメソッドです。メッセージレシーバがシングルスレッドのアーキテクチャを使用する際、.NET エージェントはエントリポイントを自動検出し、追加構成なしでダウンストリーム アクティビティと関連付けます。

エージェントは、最初の受信メソッドの終了から次の受信メソッドの開始までのコール時間を測定します。以下のループ例では、ProcessMessage() メソッドの長さは次のようになります。

MessageQueue messageQueue;
for(;;)
{
        // Call timing for previous iteration ends.
        var message = messageQueue.Receive();
        // Call timing begins.
        ProcessMessage(message);
}


マルチスレッドアーキテクチャのエントリポイント

レシーバがマルチスレッド アーキテクチャを実行中に、.NET エージェントが NServiceBus エントリポイントを自動検出するには、レシーバで nservicebus-single-threaded  アプリケーション エージェント ノード プロパティを「false」に設定します。「アプリケーションエージェントのノードプロパティ参照資料」の「nservicebus-single-threaded」を参照してください。ノードプロパティの登録方法については「アプリケーションエージェントのノードプロパティ」を参照してください。

マルチスレッドメッセージのレシーバーの場合は、エージェントによりタイミングはキャプチャされません。

NServiceBusバックエンドによる問題の解決

  • NServiceBusバージョン5を使用していて、レシーバーにダウンストリーム相関が表示されない場合、レシーバーでスレディングアーキテクチャを検証する。 マルチスレッドレシーバの nservicebus-single-threaded アプリケーション エージェント ノード プロパティを「false」に設定。

  • MSMQ を NServiceBus とは別個に使用している場合は、MSMQ のノードプロパティ、msmq-single-threaded と msmq-correlation-field のみを使用。.NET エージェントは、MSMQ トランスポートで NServiceBus を検出し、インストゥルメント化する場合、MSMQ ノードプロパティを使用しません。
  • NServiceBusバージョン4を使用している場合、パブリッシャーとレシーバーの両方でNServiceBusインストゥルメンテーションを無効化できる。
    • 以下のインストゥルメンテーション エレメントをマシンエージェント エレメントの子にコピー。

      <!--Disable NServiceBus instrumentation-->
         <instrumentation>
           <instrumentor name="NServiceBusReceiveContextInstrumentor" enabled="false"/>
           <instrumentor name="NServiceBusPublishExitInstrumentor" enabled="false"/>
           <instrumentor name="NServiceBusEntryInstrumentor" enabled="false"/>
           <instrumentor name="NServiceBusExitInstrumentor" enabled="false"/>
         </instrumentation>

      詳細については、「.NETエージェントの構成プロパティ」の「インストゥルメンテーション エレメント」を参照。

    • MSMQ また RabbitMQ の場合と同様にパブリッシャおよびレシーバを構成。