TCP Connection Events
从3.0版本开始,由`TcpConnectionEvent`实例报告`TcpConnection`实例的更改。TcpConnectionEvent`是`ApplicationEvent`的子类,因此可以通过`ApplicationContext`中定义的任何`ApplicationListener`或
@EventListener`方法接收。另请参见an event inbound channel adapter。
TcpConnectionEvents
具有以下属性:
-
connectionId
:连接标识符,可以在消息头中使用它将数据发送到连接。 -
connectionFactoryName
:连接属于连接工厂的 bean 名称。 -
throwable
:对于TcpConnectionExceptionEvent`事件的 `Throwable
。 -
source
:TcpConnection
。例如,你可以使用它来通过getHostAddress()
(强制转换)确定远程 IP 地址。
与特定连接相关的可用的 TcpConnectionEvent
包括:
-
TcpConnectionOpenEvent
-
TcpConnectionCloseEvent
-
TcpConnectionExceptionEvent
另外,自 4.0 版本起,TCP Connection Factories中讨论的标准反序列化器如今在解码数据流时如果遇到问题,将发出 TcpDeserializationExceptionEvent`实例。这些事件包括异常、正在建立中的缓冲区,以及在发生异常时缓冲区中的偏移量(如果可用)。应用程序可以使用正常的 `ApplicationListener
、@EventListener`方法或 `ApplicationEventListeningMessageProducer
(参见 Receiving Spring Application Events)来捕获这些事件,从而分析问题。
从版本 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
。