.NETのNServiceBusバックエンド

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

NServiceBus バックエンドの図

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

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)を割り当てるマルチキャストディスパッチには例外があります

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

config.xml
CODE
<machine-agent>
<instrumentation>
<instrumentor name="NServiceBusV6ExitInstrumentor" enabled="true" />
</instrumentation>
</machine-agent>
config.json
JSON
"instrumentors": {
"enable": [ "NServiceBusV6ExitInstrumentor" ]
}

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

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

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

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

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

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

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

      • アプリケーションに、追加のパスまたはネストされたフォルダをスキャンする NserviceBus AssemblyScanner 用の特別な設定が含まれている場合は、Splunk 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 の場合と同様に、パブリッシャおよび受信機を構成します。