TCP 和 UDP 支持
Spring Integration 提供了通过互联网协议接收和发送消息的通道适配器。提供了 UDP(用户数据报协议)和 TCP(传输控制协议)适配器。每个适配器都提供基于底层协议的单向通信。此外,Spring Integration 还提供了简单的入站和出站 TCP 网关。当需要双向通信时使用这些网关。
你需要将这个依赖项添加到你的项目中:
- Maven
- Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-ip</artifactId>
<version>6.4.2</version>
</dependency>
compile "org.springframework.integration:spring-integration-ip:6.4.2"
部分总结
📄️ 介绍
提供了两种类型的 UDP 入站和出站通道适配器:
📄️ UDP 适配器
本节介绍如何配置和使用 UDP 适配器。
📄️ TCP 连接工厂
对于 TCP,底层连接的配置是通过使用连接工厂提供的。提供了两种类型的连接工厂:客户端连接工厂和服务器连接工厂。客户端连接工厂建立出站连接。服务器连接工厂监听入站连接。
📄️ 测试连接
在某些场景中,在首次建立连接时发送某种健康检查请求可能是有用的。一个这样的场景可能是使用 TCP 故障切换客户端连接工厂,以便在选定服务器允许打开连接但报告其状态不健康时进行故障转移。
📄️ TCP 连接拦截器
你可以使用对 TcpConnectionInterceptorFactoryChain 的引用配置连接工厂。你可以使用拦截器为连接添加行为,例如协商、安全和其他选项。框架目前不提供任何拦截器,但可以在源代码仓库中查看 InterceptedSharedConnectionTests 以获取示例。
📄️ TCP 连接事件
从 3.0 版本开始,TcpConnection 实例的更改由 TcpConnectionEvent 实例报告。TcpConnectionEvent 是 ApplicationEvent 的子类,因此可以被 ApplicationContext 中定义的任何 ApplicationListener 或 @EventListener 方法接收。另请参阅事件输入通道适配器。
📄️ TCP 适配器
提供了使用前面提到的连接工厂的 TCP 入站和出站通道适配器。这些适配器有两个相关属性:connection-factory 和 channel。connection-factory 属性表示要使用哪个连接工厂来管理适配器的连接。channel 属性指定消息到达出站适配器的通道,以及入站适配器放置消息的通道。虽然入站和出站适配器可以共享一个连接工厂,但服务器连接工厂总是由入站适配器 “拥有”。客户端连接工厂总是由出站适配器 “拥有”。每种类型的适配器只能有一个引用连接工厂。以下示例展示了如何定义客户端和服务器 TCP 连接工厂:
📄️ TCP 网关
入站 TCP 网关 TcpInboundGateway 和出站 TCP 网关 TcpOutboundGateway 分别使用服务器和客户端连接工厂。每个连接一次可以处理一个请求或响应。
📄️ TCP 消息关联
IP 端点的一个目标是提供与其他系统(不仅仅是 Spring Integration 应用程序)的通信。因此,默认情况下,只发送和接收消息的有效载荷。自 3.0 版本以来,你可以通过使用 JSON、Java 序列化或自定义序列化器和反序列化器来传输头信息。有关更多信息,请参阅《传输头信息》。框架不提供任何消息关联(除非使用网关)或服务器端协作通道适配器。在本文档的后面部分,我们将讨论应用程序可用的各种关联技术。在大多数情况下,这需要特定的应用程序级消息关联,即使消息有效载荷包含一些自然关联数据(例如订单号)。
📄️ 关于非阻塞 I/O (NIO)
使用 NIO(参见 IP 配置属性中的 using-nio)可以避免为每个套接字专门分配一个线程。对于少量的套接字,您可能会发现不使用 NIO,而是使用异步交接(例如到 QueueChannel),其性能与使用 NIO 一样好或更好。
📄️ SSL/TLS 支持
安全套接字层/传输层安全是受支持的。当使用 NIO 时,将使用 JDK 5+ 的 SSLEngine 功能在连接建立后处理握手。当不使用 NIO 时,将使用标准的 SSLSocketFactory 和 SSLServerSocketFactory 对象来创建连接。提供了一系列策略接口以允许进行显著的自定义。这些接口的默认实现提供了最简单的方式来开始使用安全通信。
📄️ 高级技术
本节介绍了一些高级技术,您可能会发现在某些情况下这些技术很有帮助。
📄️ IP 配置属性
下表描述了您可以设置以配置 IP 连接的属性:
📄️ IP 消息头
此模块使用以下 MessageHeader 实例:
📄️ 基于注解的配置
以下是来自示例仓库的示例,展示了当你使用注解而不是 XML 时可用的一些配置选项:
📄️ 使用 Java DSL 用于 TCP 组件
DSL 对 TCP 组件的支持包括适配器和网关的规范,Tcp 类带有用于创建连接工厂 bean 的工厂方法,以及 TcpCodecs 类带有用于创建序列化程序和反序列化程序的工厂方法。有关更多信息,请参阅其 javadocs。