関連ページ:

.NET エージェントは、インストゥルメント化された階層が MSMQ または RabbitMQ のトランスポートで NServiceBus へのコールを行うと、NServiceBus バックエンドへのイグジットポイントを自動検出します。エージェントは、NServiceBus バージョン 5 以降でダウンストリーム相関の NServiceBus エントリポイントを検出します。Splunk AppDynamics は、NServiceBus バージョン 5 およびバージョン 5 と下位互換性のあるバージョンをサポートします。 

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 6 のサポート

NServiceBus バージョン 6 のサポートは試験版であり、今後のリリースで変更される可能性があります。

.Net エージェントは、送信者イグジットポイントから受信者のエントリポイントへのキューの相関で NServiceBus 6 をサポートします。エントリポイントとイグジットポイントの名前は、宛先に基づいています。宛先は、メッセージを送信または受信するキューまたはトピックの名前です。ただし、エージェントがバックエンドに静的名 nservicebus_multicast を割り当てるマルチキャストディスパッチには例外があります。エージェントは、一度に 1 つのメッセージのみがディスパッチされた場合に exit コールを検出します。複数のメッセージがまとめてディスパッチされる場合、エージェントは exit コールを検出しません。

デフォルトでは、エントリポイントのインストゥルメンテーションは有効になっていて、イグジットポイントのインストゥルメンテーションは無効になっています。イグジットポイントのインストゥルメンテーションを有効にするには、これらの設定をエージェントの構成ファイルに含めます。

<machine-agent>
       <instrumentation>
        <instrumentor name="NServiceBusV6ExitInstrumentor" enabled="true"/>
    </instrumentation>
  </machine-agent>  
XML
"instrumentors": {
        "enable": [ "NServiceBusV6ExitInstrumentor" ]
    }     
JSON

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

第三者への言及は情報提供のみを目的とし、当該組織を推奨したり、パートナー関係を示唆したりするものではありません。そのような言及に関連するすべての権利は、それぞれの所有者または当事者が留保します。


  • NServiceBus バージョン 6 を使用していて、Cisco AppDynamics .Net エージェントアセンブリに関する次の例外が発生した場合。ご使用の環境は、NServiceBus AssemblyScanner の既知の問題の影響を受ける可能性があります。
    Unhandled exception. System.Exception: Could not load '....some_assembly_name.dll'. Consider excluding that assembly from the scanning.
    ---&gt; System.IO.FileLoadException: Assembly with same name is already loaded    
    CODE

    この問題を修正するには、Cisco AppDynamics .Net エージェントアセンブリの不要なスキャンから NServiceBus AssemblyScanner を停止することを推奨します。NServiceBus によって提案された次のいずれかの回避策を実行できます。

    1. アプリケーションで Cisco AppDynamics .Net エージェントアセンブリの除外ルールを設定します。アセンブリのスキャンと、スキャンからアセンブリを除外する方法の詳細については、NServiceBus AssemblyScanner の仕様を参照してください。

    2. NserviceBus AssemblyScanner がスキャンするパスの外に Cisco AppDynamics .Net Agent エージェントアセンブリを移動します。次のいずれかのオプションを選択できます。

      • アプリケーションの作業ディレクトリは、デフォルトのスキャンパスです。アプリケーションに NServiceBus AssemblyScanner 用の特定の設定がない場合は、Cisco AppDynamics .Net エージェントアセンブリがアプリケーションの作業ディレクトリにないことを確認します。最適なオプションは、アセンブリを作業ディレクトリのネストされたフォルダに移動することです。完全に作業ディレクトリの外にアセンブリを移動することもできます

      • アプリケーションに、追加のパスまたはネストされたフォルダをスキャンする NserviceBus AssemblyScanner 用の特別な設定が含まれている場合は、Cisco AppDynamics .Net エージェントアセンブリをこれらのパスの外に移動することを推奨します。アセンブリのスキャンと、スキャンからアセンブリを除外する方法の詳細については、NServiceBus AssemblyScanner の仕様を参照してください。

  • 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 の場合と同様にパブリッシャおよびレシーバを構成。