此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

入站 TCP 网关和出站 TCP 网关分别使用服务器和客户端连接工厂。 每个连接一次可以处理一个请求或响应。TcpInboundGatewayTcpOutboundGatewaySpring中文文档

入站网关在构造包含传入有效负载的消息并将其发送到 后,等待响应,并通过将响应消息写入连接来发送有效负载。requestChannelSpring中文文档

对于入站网关,必须保留或填充标头,因为它用于将消息与连接相关联。 源自网关的邮件会自动设置标头。 如果回复构造为新消息,则需要设置标头。 可以从传入消息中捕获标头值。ip_connectionId
对于入站网关,必须保留或填充标头,因为它用于将消息与连接相关联。 源自网关的邮件会自动设置标头。 如果回复构造为新消息,则需要设置标头。 可以从传入消息中捕获标头值。ip_connectionId

与入站适配器一样,入站网关通常使用连接工厂,该工厂侦听传入的连接请求。 在某些情况下,您可能希望反向建立连接,以便入站网关连接到外部服务器,然后等待并回复该连接上的入站消息。type="server"Spring中文文档

在入站网关上使用支持此拓扑。 在这种情况下,连接工厂的类型必须为 ,并且必须设置为 。client-mode="true"clientsingle-usefalseSpring中文文档

另外两个属性支持此机制。 指定(以毫秒为单位)框架在连接失败后尝试重新连接的频率。 提供用于计划连接尝试并测试连接是否仍处于活动状态的电源。retry-intervalschedulerTaskSchedulerSpring中文文档

如果网关已启动,您可以通过发送命令来强制网关建立连接: 并使用 检查当前状态。<control-bus/>@adapter_id.retryConnection()@adapter_id.isClientModeConnected()Spring中文文档

出站网关在通过连接发送消息后,等待响应,构造响应消息,并将其放在回复通道上。 通过连接进行通信是单线程的。 一次只能处理一条消息。 如果另一个线程在收到当前响应之前尝试发送消息,则它会阻止,直到任何先前的请求完成(或超时)。 但是,如果客户端连接工厂配置为一次性连接,则每个新请求都会获得自己的连接并立即处理。 以下示例配置入站 TCP 网关:Spring中文文档

<int-ip:tcp-inbound-gateway id="inGateway"
    request-channel="tcpChannel"
    reply-channel="replyChannel"
    connection-factory="cfServer"
    reply-timeout="10000"/>

如果使用配置了默认序列化程序或反序列化程序的连接工厂,则消息是分隔数据,网关可由简单客户端(如 telnet)使用。\r\nSpring中文文档

以下示例显示了出站 TCP 网关:Spring中文文档

<int-ip:tcp-outbound-gateway id="outGateway"
    request-channel="tcpChannel"
    reply-channel="replyChannel"
    connection-factory="cfClient"
    request-timeout="10000"
    remote-timeout="10000"/> <!-- or e.g. remote-timeout-expression="headers['timeout']" -->

当前不适用于出站网关。client-modeSpring中文文档

从版本 5.2 开始,可以使用属性 来配置出站网关。 如果连接工厂配置为(每个请求/应答的新连接),网关将关闭输出流;这将向服务器发出 EOF 信号。 如果服务器使用 EOF 来确定消息的结尾,而不是流中的某个分隔符,但保持连接处于打开状态以接收回复,则这很有用。closeStreamAfterSendsingle-useSpring中文文档

通常,调用线程将在网关中阻塞,等待回复(或超时)。 从版本 5.3 开始,您可以在网关上设置属性,并释放发送线程以执行其他工作。 回复(或错误)将在接收线程上发送。 这仅适用于使用 时,在使用 NIO 时会忽略它,因为存在争用条件,即在收到回复后发生的套接字错误可以在回复之前传递到网关。asyncTcpNetClientConnectionFactorySpring中文文档

使用共享连接 () 时,当另一个请求正在处理时,新请求将被阻止,直到收到当前回复。 如果您希望在长期连接池上支持并发请求,请考虑使用singleUse=falseCachingClientConnectionFactory
使用共享连接 () 时,当另一个请求正在处理时,新请求将被阻止,直到收到当前回复。 如果您希望在长期连接池上支持并发请求,请考虑使用singleUse=falseCachingClientConnectionFactory

从版本 5.4 开始,可以使用 . 未经请求的入站消息将发送到此通道,以及延迟回复(客户端超时)。 为了在服务器端支持此功能,您现在可以向连接工厂注册多个 s。 网关和通道适配器会自动注册。 从服务器发送未经请求的消息时,必须将相应的消息添加到发送的消息中。unsolicitedMessageChannelTcpSenderIpHeaders.CONNECTION_IDSpring中文文档