跳到主要内容

TCP 连接事件

QWen Plus 中英对照 TCP Connection Events

从 3.0 版本开始,TcpConnection 实例的更改由 TcpConnectionEvent 实例报告。TcpConnectionEventApplicationEvent 的子类,因此可以被在 ApplicationContext 中定义的任何 ApplicationListener@EventListener 方法接收。另请参阅事件入境通道适配器

TcpConnectionEvents 具有以下属性:

  • connectionId: 连接标识符,你可以在消息头中使用它将数据发送到连接。

  • connectionFactoryName: 连接所属的连接工厂的bean名称。

  • throwable: Throwable(仅用于 TcpConnectionExceptionEvent 事件)。

  • source: TcpConnection。例如,你可以使用它来确定远程 IP 地址,使用 getHostAddress()(需要类型转换)。

可用的 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