TCP 和 UDP 支持
Spring Integration 提供了通过互联网协议接收和发送消息的通道适配器。它同时支持 UDP(用户数据报协议)和 TCP(传输控制协议)适配器。每个适配器都支持基于底层协议的单向通信。此外,Spring Integration 还提供了简单的入站和出站 TCP 网关,用于需要双向通信的场景。
此依赖项为项目所需:
- Maven
- Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-ip</artifactId>
<version>7.0.2</version>
</dependency>
compile "org.springframework.integration:spring-integration-ip:7.0.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 组件
TCP 组件的 DSL 支持包括适配器和网关的规范、包含创建连接工厂 Bean 的工厂方法的 Tcp 类,以及包含创建序列化器和反序列化器的工厂方法的 TcpCodecs 类。更多信息请参阅其 Javadocs。