TCP 接続イベント

バージョン 3.0 以降、TcpConnection インスタンスへの変更は TcpConnectionEvent インスタンスによって報告されます。TcpConnectionEvent は ApplicationEvent のサブクラスであるため、ApplicationContext で定義された任意の ApplicationListener または @EventListener メソッドで受信できます。「イベント 受信 チャネルアダプター」も参照してください。

TcpConnectionEvents には次のプロパティがあります。

  • connectionId: 接続にデータを送信するためにメッセージヘッダーで使用できる接続識別子。

  • connectionFactoryName: 接続が属する接続ファクトリの Bean 名。

  • throwableThrowable (TcpConnectionExceptionEvent イベントのみ)。

  • sourceTcpConnection これを使用して、たとえば、getHostAddress() でリモート IP アドレスを判別できます(キャストが必要)。

特定の接続に関連する利用可能な TcpConnectionEvent には次のものがあります。

  • TcpConnectionOpenEvent

  • TcpConnectionCloseEvent

  • TcpConnectionExceptionEvent

さらに、バージョン 4.0 以降、TCP 接続ファクトリで説明されている標準デシリアライザーは、データストリームのデコード中に問題が発生した場合に TcpDeserializationExceptionEvent インスタンスを発行するようになりました。これらのイベントには、例外、構築中のバッファ、例外が発生した時点でのバッファへのオフセット (使用可能な場合) が含まれます。アプリケーションは、通常の ApplicationListener@EventListener メソッド、または ApplicationEventListeningMessageProducer ( Spring アプリケーションイベントの受信を参照) を使用してこれらのイベントをキャプチャーし、問題を分析できます。

バージョン 4.0.7 および 4.1.3 以降、サーバーソケットで予期しない例外が発生すると(サーバーソケットの使用中に BindException など)、TcpConnectionServerExceptionEvent インスタンスが公開されます。これらのイベントには、接続ファクトリと原因への参照があります。

バージョン 4.2 以降、TcpConnectionFailedCorrelationEvent インスタンスは、ip_connectionId ヘッダーが無効であるため接続にルーティングできないメッセージをエンドポイント(受信ゲートウェイまたはコラボレーション送信チャネルアダプター)が受信するたびに公開されます。送信ゲートウェイは、遅い応答が受信されたとき(送信者スレッドがタイムアウトしたとき)にもこのイベントを発行します。このイベントには、失敗したメッセージを含む cause プロパティの例外と接続 ID が含まれます。

バージョン 4.3 以降、サーバー接続ファクトリが開始されると TcpConnectionServerListeningEvent が発行されます。これは、ファクトリがポート 0 でリッスンするように構成されている場合、つまりオペレーティングシステムがポートを選択する場合に役立ちます。ソケットに接続する他のプロセスを開始する前に待機する必要がある場合は、isListening() をポーリングする代わりに使用することもできます。

リスニングスレッドが接続を受け入れるのを遅延させないために、イベントは別のスレッドで公開されます。

バージョン 4.3.2 から、クライアント接続を作成できない場合は常に TcpConnectionFailedEvent が発行されます。イベントのソースは接続ファクトリであり、これを使用して、接続を確立できなかったホストとポートを判別できます。

単一の ApplicationListener (または @EventListener メソッド) を使用してこれらのイベント ( TcpConnectionEvent を含む) をすべて受信するには、IpIntegrationEvent を受信するようにリスナーを構成します。