TCP 連線事件

從 3.0 版本開始,TcpConnection 例項的變更由 TcpConnectionEvent 例項報告。TcpConnectionEventApplicationEvent 的子類,因此可以被在 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 版本開始,當端點(入站閘道器或協作的出站通道介面卡)接收到由於 ip_connectionId 頭部無效而無法路由到連線的訊息時,就會發布 TcpConnectionFailedCorrelationEvent 例項。出站閘道器在收到延遲迴復(傳送執行緒已超時)時也會發布此事件。該事件包含連線 ID 以及 cause 屬性中的異常,該屬性包含失敗的訊息。

從 4.3 版本開始,當伺服器連線工廠啟動時,會發出 TcpConnectionServerListeningEvent。當工廠配置為監聽埠 0(意味著作業系統選擇埠)時,這非常有用。如果需要在啟動連線到套接字的其他程序之前等待,也可以使用它代替輪詢 isListening()

為了避免延遲監聽執行緒接受連線,事件會在單獨的執行緒上釋出。

從 4.3.2 版本開始,只要無法建立客戶端連線,就會發出 TcpConnectionFailedEvent。事件的源是連線工廠,您可以使用它來確定無法建立連線的主機和埠。

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