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が実行される前に多くのアプリケーションフローが発生する場合は、以下のようにアプリケーションフローの追跡を有効にする必要があります。

  • 適切な POJO エントリポイントを見つけて、これを構成
  • enable-spring-integration-entry-points ノードプロパティを false に設定。このプロパティはデフォルトで true に設定されています。
  • アプリケーションサーバーを再起動。

ループするポーリング可能チャンネルの追跡を制限

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

spring-integration-receive-marker-classes ノードプロパティは、変更を反映するために process() メソッドが実行される前に構成する必要があります。このプロパティの設定後、アプリケーションサーバーを再起動します。