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

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

提供了使用前面提到的连接工厂的 TCP 入站和出站通道适配器。 这些适配器具有两个相关属性:和 。 该属性指示将使用哪个连接工厂来管理适配器的连接。 该属性指定消息到达出站适配器的通道,以及入站适配器放置消息的通道。 虽然入站适配器和出站适配器都可以共享连接工厂,但服务器连接工厂始终由入站适配器“拥有”。 客户端连接工厂始终由出站适配器“拥有”。 每种类型的适配器只能获得对连接工厂的引用。 下面的示例演示如何定义客户端和服务器 TCP 连接工厂:connection-factorychannelconnection-factorychannelSpring中文文档

<bean id="javaSerializer"
      class="org.springframework.core.serializer.DefaultSerializer"/>
<bean id="javaDeserializer"
      class="org.springframework.core.serializer.DefaultDeserializer"/>

<int-ip:tcp-connection-factory id="server"
    type="server"
    port="1234"
    deserializer="javaDeserializer"
    serializer="javaSerializer"
    using-nio="true"
    single-use="true"/>

<int-ip:tcp-connection-factory id="client"
    type="client"
    host="localhost"
    port="#{server.port}"
    single-use="true"
    so-timeout="10000"
    deserializer="javaDeserializer"
    serializer="javaSerializer"/>

<int:channel id="input" />

<int:channel id="replies">
    <int:queue/>
</int:channel>

<int-ip:tcp-outbound-channel-adapter id="outboundClient"
    channel="input"
    connection-factory="client"/>

<int-ip:tcp-inbound-channel-adapter id="inboundClient"
    channel="replies"
    connection-factory="client"/>

<int-ip:tcp-inbound-channel-adapter id="inboundServer"
    channel="loop"
    connection-factory="server"/>

<int-ip:tcp-outbound-channel-adapter id="outboundServer"
    channel="loop"
    connection-factory="server"/>

<int:channel id="loop"/>

在前面的配置中,到达通道的消息通过连接工厂创建的连接进行序列化,在服务器接收并放置在通道上。 由于 是 的输入通道,因此消息通过同一连接循环回,由 接收并存放在通道中。 Java 序列化在网络上使用。inputclientlooploopoutboundServerinboundClientrepliesSpring中文文档

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

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

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

如果未提供调度程序,则使用框架的默认 taskScheduler bean。Spring中文文档

对于出站适配器,通常在发送第一条消息时建立连接。 出站适配器上会导致在启动适配器时建立连接。 默认情况下,适配器会自动启动。 同样,连接工厂的类型必须为 . A 和 也受支持。 如果连接失败,则由调度程序或在发送下一条消息时重新建立连接。client-mode="true"clientsingle-use="false"retry-intervalschedulerSpring中文文档

对于入站和出站,如果适配器已启动,则可以通过发送命令来强制适配器建立连接: 。 然后,您可以使用 来检查当前状态。<control-bus />@adapter_id.retryConnection()@adapter_id.isClientModeConnected()Spring中文文档