对于最新的稳定版本,请使用 Spring Integration 6.4.3! |
TCP 连接事件
从版本 3.0 开始,对TcpConnection
实例由TcpConnectionEvent
实例。TcpConnectionEvent
是ApplicationEvent
因此,任何人都可以接收ApplicationListener
在ApplicationContext
或@EventListener
方法。
另请参阅事件入站通道适配器。
TcpConnectionEvents
具有以下属性:
-
connectionId
:连接标识符,您可以在消息标头中使用该标识符将数据发送到连接。 -
connectionFactoryName
:连接所属的连接工厂的 Bean 名称。 -
throwable
:这Throwable
(对于TcpConnectionExceptionEvent
仅限事件)。 -
source
:这TcpConnection
. 例如,您可以使用它来确定远程 IP 地址getHostAddress()
(需要强制转换)。
可用TcpConnectionEvent
s 与特定连接相关的 s,包括:
-
TcpConnectionOpenEvent
-
TcpConnectionCloseEvent
-
TcpConnectionExceptionEvent
此外,从 4.0 版本开始,TCP 连接工厂中讨论的标准反序列化器现在发出TcpDeserializationExceptionEvent
实例。
这些事件包含异常、正在构建的缓冲区,以及在发生异常的点进入缓冲区的偏移量(如果可用)。
应用程序可以使用普通的ApplicationListener
一@EventListener
方法或ApplicationEventListeningMessageProducer
(参见接收 Spring 应用程序事件)来捕获这些事件,从而允许分析问题。
从版本 4.0.7 和 4.1.3 开始,TcpConnectionServerExceptionEvent
每当服务器套接字上发生意外异常(例如BindException
当服务器套接字正在使用时)。
这些事件引用了连接工厂和原因。
从版本 4.2 开始,TcpConnectionFailedCorrelationEvent
每当终端节点(入站网关或协作出站通道适配器)收到无法路由到连接的消息时,都会发布实例,因为ip_connectionId
header 无效。
出站网关也会在收到延迟回复(发送方线程已超时)时发布此事件。
该事件包含连接 ID 以及cause
属性,其中包含失败的消息。
从版本 4.3 开始,一个TcpConnectionServerListeningEvent
在启动 Server Connection Factory 时发出。
当工厂配置为侦听端口0
,这意味着作系统选择端口。
它也可以用来代替轮询isListening()
,如果您需要在启动连接到 socket 的其他进程之前等待。
为了避免延迟侦听线程接受连接,该事件将在单独的线程上发布。 |
从版本 4.3.2 开始,TcpConnectionFailedEvent
每当无法创建客户端连接时发出。
事件的来源是连接工厂,您可以使用它来确定无法建立连接的主机和端口。
要使用单个ApplicationListener
(或@EventListener
方法)来接收所有这些事件(包括TcpConnectionEvent
s),将监听器配置为接收IpIntegrationEvent
s.