Spring integration 请求的第二个会话出现Spring集成TCP客户端连接问题

Spring integration 请求的第二个会话出现Spring集成TCP客户端连接问题,spring-integration,spring-batch,tcpclient,message-channel,Spring Integration,Spring Batch,Tcpclient,Message Channel,我有一个springintegration+springbatch需求,其中我必须与远程服务器建立TCP客户端连接,并发送由springbatch处理的数千条记录组成的请求。我正在使用MessageBuilder作为有效负载和消息通道来发送数据。我们发送所有记录,然后发送请求响应消息负载,以开始从服务器接收响应。服务器使用响应数据进行响应,响应数据使用转换器进行处理,并添加到队列通道以供以后读取 @配置 @使能集成 公共类网关配置{ 私有静态最终记录器Logger=LoggerFactory.g

我有一个springintegration+springbatch需求,其中我必须与远程服务器建立TCP客户端连接,并发送由springbatch处理的数千条记录组成的请求。我正在使用MessageBuilder作为有效负载和消息通道来发送数据。我们发送所有记录,然后发送请求响应消息负载,以开始从服务器接收响应。服务器使用响应数据进行响应,响应数据使用转换器进行处理,并添加到队列通道以供以后读取

@配置
@使能集成
公共类网关配置{
私有静态最终记录器Logger=LoggerFactory.getLogger(GatewayConfig.class);
@自动连线
私有网关属性;
/**客户端连接工厂的抽象类。
* 
*@return AbstractClientConnectionFactory
*@抛出异常
*/
@豆子
公共抽象客户端连接工厂客户端cf(){
AbstractClientConnectionFactory工厂=新的TcpNetClientConnectionFactory(“138.25.189.110”,5030);
factory.SetSokePaLive(真);
setDeserializer(新的bytearraysingletterminatorserializer((字节)13));
返回工厂;
}
/**
*通过TCP接收消息。
*指定生成的消息应发送到的MessageChannel。
*@param连接工厂
*@return-tcprecivingChannelAdapter
*/
@豆子
public tcPrevivingChannelAdapter inboundAdapterClient(@Qualifier(“clientCF”)AbstractClientConnectionFactory connectionFactory){
TCPrecivingChannelAdapter=新的TCPrecivingChannelAdapter();
//adapter.setOutputChannelName(GatewayConstants.AGGREGATOR\u PRE\u INPUT\u CHANNEL);
adapter.setOutputChannelName(GatewayConstants.PRETRANSFORM_通道);
adapter.setErrorChannelName(GatewayConstants.TCP_错误);
adapter.setClientMode(true);
适配器.setConnectionFactory(connectionFactory);
返回适配器;
}
@Bean(GatewayConstants.RECEIVE\u CHANNEL\u NAME)
公共队列通道接收通道(){
返回新的队列通道();
}
@豆子
@转换器(inputChannel=GatewayConstants.PRETRANSFORM\u CHANNEL,outputChannel=GatewayConstants.RECEIVE\u CHANNEL\u NAME)
公共预转换预转换MMET(){
返回新的预转换();
}
/**
*通过TCP发送消息
*@param连接工厂
*@返回
*/
@豆子
@ServiceActivator(inputChannel=GatewayConstants.SEND\u TO\u VENDOR\u CHANNEL\u NAME)
公共TcpSendingMessageHandler messageHandlerClient(@Qualifier(“clientCF”)AbstractClientConnectionFactory connectionFactory){
TcpSendingMessageHandler sendingHandler=新的TcpSendingMessageHandler();
sendingHandler.setConnectionFactory(connectionFactory);
sendingHandler.setClientMode(true);
返回发送处理器;
}
/**
* 
*@返回
*/
@Bean(GatewayConstants.TCP\u错误)
public MessageChannel tcperrorchannel(){
返回新的DirectChannel();
}
@Bean(网关常数.预转换\u通道)
公共消息频道预接收频道(){
返回新的DirectChannel();
}
@Bean(GatewayConstants.BATCH\u SEND\u CHANNEL\u NAME)
public MessageChannel sendchannel(){
返回新的DirectChannel();
}
/**
* 
*@返回
*/
@Bean(网关常量。发送到\u供应商\u通道\u名称)
公共消息频道发送到供应商频道(){
返回新的DirectChannel();
}
批处理作业每天午夜运行。在应用程序启动/部署后,成功发送请求并接收响应,但第二天服务器未接收到任何数据。发送请求时没有tcp连接异常,但服务器端未接收到任何数据

我甚至将singleuse设置为true,但getting run time Exception客户端无法将sing use设置为true。在发送请求之前和接收响应之后,是否有一种方法可以记录连接建立的时间和tcp连接的状态?
感谢您的帮助并提前向您表示感谢。

您可以添加
ApplicationListener
bean(或
@EventListener
方法)来接收各种
TcpConnectionEvent
事件(打开、关闭等)

编辑

只需将此添加到您的一个bean中

@EventListener
公共无效connectionEvent(TcpConnectionEvent事件){
...
}

我们是否有任何TCP客户端连接事件的EventListener实现示例。谢谢Gary。我看到Spring integration调试日志,TCP套接字连接每1分钟打开和关闭一次。我没有将singleuse设置为true,但为什么连接每分钟关闭和打开一次。
ClientCF:添加了新连接:localhost:5030:52994:7af4a20b-7cc6-4989-b5ee-d9d1259c8ec3客户端CF:删除的关闭连接:本地主机:5030:52987:3e541599-ad5c-4ca2-9a93-50689487DD5连接本地主机:5030:52994:7af4a20b-7cc6-4989-b5ee-d9d1259c8ec3已建立,可读取:0连接本地主机:5030:52994:7af4a20b-7cc6-4989-b5ee-D9EC3已建立在注释中,编辑问题,并注释您已这样做。很可能服务器正在关闭空闲连接。网络跟踪(例如Wireshark)将确认。当然,Gary将确保。我使用了事件侦听器,能够捕获TCP连接的打开和关闭。我可以手动重置连接吗?您可以使用连接的
connectionId
属性在连接工厂上调用
closeConnection()