配置keep alive以保持连接始终处于活动状态

时间:2017-10-05 10:45:25

标签: spring-integration

我有一个tcp客户端 - 服务器应用程序,客户端打开一个单独使用的连接,并在配置的时间后断开连接。如何配置它始终保持连接处于活动状态,在关闭的连接上重新连接并确保向服务器打开多个客户端连接。

客户端配置:

<int-ip:tcp-connection-factory id="client"
    type="client"
    host="${server.TCP.host}"
    port="${server.TCP.port}"
    single-use="true"
    so-timeout="${client.TCP.socketTimeOut}" />

<int-ip:tcp-outbound-gateway id="outGateway"
    request-channel="bytesOut"
    reply-channel="bytesIn"
    connection-factory="client"
    request-timeout="${client.TCP.requestTimeOut}"
    reply-timeout="${client.TCP.replyTimeout}" />

服务器配置:

<int-ip:tcp-connection-factory id="tcpServerConnFactory"
    type="server" 
    port="${service.tcp.port}" 
    using-nio="true"
    single-use="false" 
    so-timeout="${service.tcp.socketTimeout}"
    task-executor="taskExecutor"/>

<int-ip:tcp-inbound-gateway 
    id="tcpInboundGateway" 
    connection-factory="tcpServerConnFactory" 
    request-channel="bytesInChannel"
    reply-channel="bytesOutChannel"
    error-channel="errorChannel" />

1 个答案:

答案 0 :(得分:1)

在客户端单独使用意味着 - 每个套接字用于一个请求/回复然后关闭。

single-use="false"时,一个共享连接用于所有请求/回复 - 并且每个调用者阻塞等待套接字。

您可以使用&#39; CachingClientConnectionFactory`来维护永久连接池 - 请参阅the documentation

  

如上所述,TCP套接字可以是单次使用(一个请求/响应)或共享。在高容量环境中,共享套接字与出站网关的性能不佳,因为套接字一次只能处理一个请求/响应。

     

为了提高性能,用户可以使用协作通道适配器而不是网关,但这需要应用程序级消息关联。有关更多信息,请参见第31.8节“TCP消息关联”。

     

Spring Integration 2.2引入了一个缓存客户端连接工厂,其中使用了一个共享套接字池,允许网关使用共享连接池处理多个并发请求。

即将推出的5.0版本 - 目前处于里程碑7(5.0.0.M7)。有Thread Affinity Connection Factory可以保持每个调用线程的连接打开。