跳到主要内容
版本:7.0.2

TCP 连接事件

DeepSeek V3 中英对照 TCP Connection Events

从版本 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()

important

为避免延迟监听线程接受连接,事件会在单独的线程上发布。

从 4.3.2 版本开始,每当无法创建客户端连接时,都会发出一个 TcpConnectionFailedEvent 事件。该事件的来源是连接工厂,你可以利用它来确定无法建立连接的主机和端口。

要使用单个 ApplicationListener(或 @EventListener 方法)来接收所有这些事件(包括 TcpConnectionEvent),请配置监听器以接收 IpIntegrationEvent