TCP 接続イベント
バージョン 3.0 以降、TcpConnection
インスタンスへの変更は TcpConnectionEvent
インスタンスによって報告されます。TcpConnectionEvent
は ApplicationEvent
のサブクラスであるため、ApplicationContext
で定義された任意の ApplicationListener
または @EventListener
メソッドで受信できます。「イベント受信 チャネルアダプター」も参照してください。
TcpConnectionEvents
には次のプロパティがあります。
connectionId
: 接続にデータを送信するためにメッセージヘッダーで使用できる接続識別子。connectionFactoryName
: 接続が属する接続ファクトリの Bean 名。throwable
:Throwable
(TcpConnectionExceptionEvent
イベントのみ)。source
:TcpConnection
これを使用して、たとえば、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
を受信するようにリスナーを構成します。