.NETのMSMQバックエンド

.NET エージェント(エージェント)は、インストゥルメント化された階層が MSMQ へのコールを実行すると、MSMQ バックエンドを自動検出します。MSMQ イグジットポイントは、メッセージをキューにパブリッシュまたはプッシュするメソッドです。MSMQ トランスポート経由で NServiceBus を使用している場合は、「 .NETのNServiceBusバックエンド」を参照してください。

MSMQ エントリポイントは、キュー内の新しいメッセージをリッスンまたはポーリングするメソッドです。エージェントが MSMQ のエントリポイントを検出したり、ダウンストリーム相関を実行する前に、相関フィールドを定義し、マルチスレッド アーキテクチャの場合はスレディングアーキテクチャを指定する必要があります。

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

システムから返されたキュー名が、エージェントによりキューに命名されます。

エントリポイント

MSMQ のダウンストリーム相関を有効化するには、エージェントを構成する必要があります。

MSMQ 相関フィールドの定義

msmq-correlation-field アプリケーション エージェント ノードプロパティをパブリッシュ階層とレシーブ階層の両方に登録します。エージェントが相関情報を書き込むまたは読み取るフィールドを指定します。

このエージェントは次のフィールドに対応しています。

  • 拡張、デフォルトフィールド
  • ラベル

デフォルトでは、.NET エージェントは [Extension] フィールドに書き込みます。ただし、MSMQ でビルドされた一部のフレームワークはデータを [Extension] フィールドに書き込みます。この場合、すでに使用されているため [Extension] フィールドは動作しないので、.NET エージェントが相関データを [Label] フィールドに書き込むように構成する必要があります。

注: キューの実装に使用されていないフィールドを選択します。実装に「ラベル」と「拡張子」フィールドの両方が使用されている場合、現段階ではダウンストリーム相関は不可能です。

アプリケーション エージェントのノードプロパティ参照資料」の「msmq-correlation-field」を参照してください。ノードプロパティの登録手順については、「アプリケーション エージェントのノードプロパティ」を参照してください。

スレディングアーキテクチャの指定

キューの実装でマルチスレッド アーキテクチャを使用する場合、msmq-single-threaded アプリケーション エージェントノード プロパティを登録して、スレッディング アーキテクチャを指定する必要があります。MSMQ のマルチスレッド実装の場合は、msmq-single-threaded を「False」に設定します。「アプリケーション エージェントのノードプロパティ参照資料」の「msmq-single-threaded」を参照してください。ノードプロパティの登録手順については、「アプリケーション エージェントのノードプロパティ」を参照してください。

スレディングアーキテクチャは、エージェントのメッセージキューに対するコールのタイミングの計算方法を決定します。

  • シングルスレッドキューの場合、エージェントは各受信リクエストの間のコールタイムを計算する。コールタイムは、最初の受信メソッドの終了時に始まり、次の受信メソッドの開始時に終了します。次の例は、ProcessMessage() のコールタイムの長さです。

    CODE
    MessageQueue messageQueue;
    for(;;)
    {
    var message = messageQueue.Receive();
    ProcessMessage(message);
    }
  • マルチスレッドキューの場合、エージェントによりタイミングはキャプチャされない。