TCP 連線事件

從 3.0 版開始,TcpConnection 實例的變更會由 TcpConnectionEvent 實例回報。TcpConnectionEventApplicationEvent 的子類別,因此可以由 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 版開始,每當伺服器 Socket 上發生意外例外狀況(例如伺服器 Socket 正在使用時的 BindException)時,就會發佈 TcpConnectionServerExceptionEvent 實例。這些事件具有對連線工廠和原因的參考。

從 4.2 版開始,每當端點(輸入閘道器或協作輸出通道配接器)收到無法路由到連線的訊息,因為 ip_connectionId 標頭無效時,就會發佈 TcpConnectionFailedCorrelationEvent 實例。當收到延遲回覆(傳送者執行緒已逾時)時,輸出閘道器也會發佈此事件。該事件包含連線 ID 以及 cause 屬性中的例外狀況,其中包含失敗的訊息。

從 4.3 版開始,當伺服器連線工廠啟動時,會發出 TcpConnectionServerListeningEvent。當工廠設定為監聽埠 0 時,這非常有用,這表示作業系統選擇了埠。如果您需要在啟動連線到 Socket 的其他程序之前等待,也可以使用它來代替輪詢 isListening()

為了避免延遲監聽執行緒接受連線,事件會在個別執行緒上發佈。

從 4.3.2 版開始,每當無法建立用戶端連線時,就會發出 TcpConnectionFailedEvent。事件的來源是連線工廠,您可以使用它來判斷無法建立連線的主機和埠。

若要使用單一 ApplicationListener(或 @EventListener 方法)來接收所有這些事件(包括 TcpConnectionEvent),請將監聽器設定為接收 IpIntegrationEvent