.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() のコールタイムの長さです。
CODEMessageQueue messageQueue; for(;;) { var message = messageQueue.Receive(); ProcessMessage(message); } - マルチスレッドキューの場合、エージェントによりタイミングはキャプチャされない。