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