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 開始,每當伺服器套接字上發生意外異常(例如伺服器套接字正在使用時發生 BindException)時,都會發布 TcpConnectionServerExceptionEvent 例項。這些事件包含對連線工廠和原因的引用。

從版本 4.2 開始,每當端點(入站閘道器或協作的出站通道介面卡)收到無法路由到連線的訊息時,因為 ip_connectionId 頭無效,都會發布 TcpConnectionFailedCorrelationEvent 例項。當收到延遲迴復時(傳送方執行緒已超時),出站閘道器也會發布此事件。該事件包含連線 ID 以及 cause 屬性中的異常,其中包含失敗的訊息。

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

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

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

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

© . This site is unofficial and not affiliated with VMware.