Spring ベースのアプリケーションの場合、Spring Integration により、軽量のメッセージングが可能になり、宣言型アダプタ経由の外部システムとの統合がサポートされます。
Java エージェントは、MessageHandler
インターフェイスに基づいて自動的にエントリポイントを検出します。Java エージェントは、すべての Spring Integration Release 2.2.0 チャンネルのイグジットポイントを自動的に検出します。ただし、DirectChannel
は例外です。
Java エージェントは、Spring Integration のメッセージングチャンネルを通じたアプリケーションフローの追跡をサポートします。ポーリング可能なチャンネルの場合は次のとおりです。
- 継続的なトランザクションは、Spring Integrationフレームワークがメッセージをポーリングしている場合に追跡される。
- アプリケーションコードがループ内のメッセージのポーリングを行う場合、各ループの繰り返しスパンはトランザクションとして追跡されます。ループが始まるとトラッキングが開始され、繰り返しが終了するとループも終了します。
エントリポイント
開始トランザクションは、MessageHandler.handleMessage()
実装で始まります。受信メッセージがJavaエージェントによってすでに認識されている場合は、継続的なトランザクションが開始します。
イグジットポイント
イグジットポイントは MessageChannel.send()
に基づきます。
大半のメッセージチャンネルはJVM内に存在します。フローマップにこの配置を表すために、コントローラ UI には、ティアからメッセージ チャンネル コンポーネント名(bean 名)に行き、そしてティアに戻ってくるリンクが示されます。
Spring Integrationサポートのカスタマイズ
以下のセクションでは、デフォルトの Spring Integration モニタリングの調整に関する典型的なシナリオについて説明します。
メッセージハンドラが実行される前のアプリケーションフローを追跡
最初のMessageHandlerが実行される前に多くのアプリケーションフローが発生する場合は、以下のようにアプリケーションフローの追跡を有効にする必要があります。
ループするポーリング可能チャンネルの追跡を制限
pollableChannel.receive()
がループ内で呼び出されていない場合に対する予防策として、以下の例で定義されているのと同じようなクラス/メソッドの組み合わせの中で発生する場合のみ、Java エージェントがポーリング可能チャンネルループを追跡するように構成できます。
ループ内のメッセージのポーリングを行うクラス/メソッドの組み合わせごとに、spring-integration-receive-marker-classes ノードプロパティを構成できます。この場合、このノードプロパティで識別されるクラス/メソッドだけが追跡されます。
class MessageProcessor {
void process() {
while(true) {
Message message = pollableChannel.receive()
}
}
}
CODE
たとえば、上のループの場合、以下のように spring-integration-receive-marker-classes
ノードプロパティを設定し、アプリケーションサーバを再起動します。
spring-integration-receive-marker-classes=MessageProcessor/process
CODE
Note:spring-integration-receive-marker-classes
ノードプロパティは、変更を反映するために process()
メソッドが実行される前に構成する必要があります。このプロパティの設定後、アプリケーションサーバーを再起動します。