对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
提供了使用前面提到的连接工厂的 TCP 入站和出站通道适配器。
这些适配器具有两个相关属性:和 .
该属性指示要使用哪个连接工厂来管理适配器的连接。
该属性指定消息到达出站适配器的通道以及入站适配器放置消息的通道。
虽然入站和出站适配器可以共享一个连接工厂,但服务器连接工厂始终由入站适配器“拥有”。
客户端连接工厂始终由出站适配器“拥有”。
每种类型只有一个适配器可以获得对连接工厂的引用。
以下示例说明如何定义客户端和服务器 TCP 连接工厂:connection-factory
channel
connection-factory
channel
<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 序列化用于网络。input
client
loop
loop
outboundServer
inboundClient
replies
通常,入站适配器使用连接工厂,该工厂侦听传入的连接请求。
在某些情况下,您可能希望反向建立连接,以便入站适配器连接到外部服务器,然后等待该连接上的入站消息。type="server"
入站适配器上的设置支持此拓扑。
在这种情况下,连接工厂必须是 type 并且必须设置为 。client-mode="true"
client
single-use
false
两个附加属性支持此机制。
它指定(以毫秒为单位)框架在连接失败后尝试重新连接的频率。
提供 a 来计划连接尝试并测试连接是否仍处于活动状态。retry-interval
scheduler
TaskScheduler
如果您不提供调度程序,则使用框架的默认taskScheduler Bean。
对于出站适配器,通常在发送第一条消息时建立连接。
在出站适配器上会导致在启动适配器时建立连接。
默认情况下,适配器会自动启动。
同样,连接工厂必须是类型并且具有 。
A 和 也受支持。
如果连接失败,则调度程序或在发送下一条消息时重新建立连接。client-mode="true"
client
single-use="false"
retry-interval
scheduler
对于入站和出站,如果适配器已启动,则可以通过发送命令来强制适配器建立连接: 。
然后,您可以使用 检查当前状态。<control-bus />
@adapter_id.retryConnection()
@adapter_id.isClientModeConnected()