Spring integration 在Spring TCP集成时,在TcpOutboundGateway等待响应异常时超时

Spring integration 在Spring TCP集成时,在TcpOutboundGateway等待响应异常时超时,spring-integration,Spring Integration,目前,我正在通过Spring integration TCP进行外部供应商集成,通过创建不同的@ServiceActivator以实现唯一的IP/端口组合,将IP 1、端口1、端口2、端口3和端口1、端口2和端口3发送到不同的端口 在正常的消息加载中,一切都正常工作,但是,当我将负载增加到40-50个事务/秒时,通过等待响应,我看到消息超时 下面是其中一个Service Activator,其他也以类似的方式设置。如果我的主ip不可用,我将使用FailoverClient ConnectionF

目前,我正在通过Spring integration TCP进行外部供应商集成,通过创建不同的@ServiceActivator以实现唯一的IP/端口组合,将IP 1、端口1、端口2、端口3和端口1、端口2和端口3发送到不同的端口

在正常的消息加载中,一切都正常工作,但是,当我将负载增加到40-50个事务/秒时,通过等待响应,我看到消息超时

下面是其中一个Service Activator,其他也以类似的方式设置。如果我的主ip不可用,我将使用FailoverClient ConnectionFactory进行故障切换。我还使用了CachingClientConnectionFactory,这样,我的每个请求都不必创建昂贵的连接

@Bean
@ServiceActivator(inputChannel = "toRequest")
public MessageHandler serviceActivatorOne() {
    TcpOutboundGateway tcpOutputGateway = new TcpOutboundGateway();
    List<ServerNode> nodes = properties.getFailOver().getServers().subList(0,2);
    tcpOutputGateway.setConnectionFactory(createFailOverConnectionFactory(nodes));
    tcpOutputGateway.setReplyChannelName("bytesToObjectChannel");
    tcpOutputGateway.setRemoteTimeout(5000);
    return tcpOutputGateway;
}

...
...

private AbstractClientConnectionFactory createFailOverConnectionFactory(List<ServerNode> serverNodeList) {
        FailoverClientConnectionFactory connectionFactory =
                new FailoverClientConnectionFactory(createConnectionFactories(serverNodeList));
        connectionFactory.setSingleUse(true);
        connectionFactory.afterPropertiesSet();
        return connectionFactory;
    }

private AbstractClientConnectionFactory createDefaultConnectionFactory(String url, int port, String name) {
        TcpNetClientConnectionFactory connFactory = new TcpNetClientConnectionFactory(url, port);
        connFactory.setSerializer(byteArrayLengthHeaderSerializer());
        connFactory.setDeserializer(byteArrayLengthHeaderSerializer());
        connFactory.setSoTimeout(properties.getSocketTimeOut());
        connFactory.setSoKeepAlive(true);
        connFactory.setLookupHost(false);
        connFactory.setComponentName(name);
        connFactory.setSingleUse(true);

        if(properties.getPoolMaxSize() <= 0) {
            return connFactory;
        } else {
            CachingClientConnectionFactory cachingConnFactory =
                    new CachingClientConnectionFactory(connFactory, properties.getPoolMaxSize());
            cachingConnFactory.setConnectionWaitTimeout(properties.getPoolMaxWait());
            return cachingConnFactory;
        }
    }

我试图从TCP上的Spring参考中找出一些细节,但到目前为止没有成功。我没有使用共享套接字,因为setSingleUse设置为false。任何帮助/线索都将不胜感激

看起来您连接的服务器在重载情况下无法及时响应5秒超时

似乎默认的remoteTimeout是10秒,我将其设置为5秒,似乎服务器无法在5秒内响应。我可以调整remoteTimeout并进行检查。您是否有任何建议,我可以在哪里更改任何spring tcp集成设置,或者这完全取决于服务器的响应速度慢


对,它确实依赖于服务器。我想象有一种情况,当有一些巨大的负载时,即使是10秒钟也不够。您应该咨询您的服务器供应商以确定其吞吐量。

但您的问题是什么?看起来您连接的服务器在重载情况下无法及时响应5秒超时。谢谢。我的问题是为什么在重载情况下会发生超时,但我明白你的意思。似乎默认的remoteTimeout是10秒,我将其设置为5秒,似乎服务器无法在5秒内响应。我可以调整remoteTimeout并进行检查。您是否有任何建议,我可以在哪里更改任何spring tcp集成设置,或者这完全取决于服务器的响应速度慢?是的,这确实取决于服务器。我想象有一种情况,当有一些巨大的负载时,即使是10秒钟也不够。您应该咨询服务器供应商以确定其吞吐量
[DEBUG]-[http-nio-9090-exec-103]-[11-Nov-2019;22:01:14.403]-[TcpOutboundGateway:handleRequestMessage:162]-Remote Timeout on 1980e8d4-3167-4610-b8ac-8fb0d20eb92a:1
[DEBUG]-[http-nio-9090-exec-103]-[11-Nov-2019;22:01:14.403]-[SimplePool:releaseItem:226]-Releasing TcpNetConnection:216.76.27.251:20303:54340:d9c78e03-ecbb-45af-b502-6aff9a9b0036 back to the pool
[ERROR]-[http-nio-9090-exec-103]-[11-Nov-2019;22:01:14.404]-[TcpOutboundGateway:handleRequestMessage:174]-Tcp Gateway exception
org.springframework.integration.MessageTimeoutException: Timed out waiting for response
    at org.springframework.integration.ip.tcp.TcpOutboundGateway.handleRequestMessage(TcpOutboundGateway.java:166)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:123)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:162)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:144)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
    at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:453)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:401)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:187)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:166)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:109)
    at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:4