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 版本開始,當端點(入站閘道器或協作的出站通道介面卡)接收到由於 ip_connectionId
頭部無效而無法路由到連線的訊息時,就會發布 TcpConnectionFailedCorrelationEvent
例項。出站閘道器在收到延遲迴復(傳送執行緒已超時)時也會發布此事件。該事件包含連線 ID 以及 cause
屬性中的異常,該屬性包含失敗的訊息。
從 4.3 版本開始,當伺服器連線工廠啟動時,會發出 TcpConnectionServerListeningEvent
。當工廠配置為監聽埠 0
(意味著作業系統選擇埠)時,這非常有用。如果需要在啟動連線到套接字的其他程序之前等待,也可以使用它代替輪詢 isListening()
。
為了避免延遲監聽執行緒接受連線,事件會在單獨的執行緒上釋出。 |
從 4.3.2 版本開始,只要無法建立客戶端連線,就會發出 TcpConnectionFailedEvent
。事件的源是連線工廠,您可以使用它來確定無法建立連線的主機和埠。
要使用單個 ApplicationListener
(或 @EventListener
方法)來接收所有這些事件(包括 TcpConnectionEvent
),請將監聽器配置為接收 IpIntegrationEvent
。