如何减少TcpOutboundGateway的超时时间?

时间:2019-09-25 16:52:46

标签: java spring spring-boot tcp spring-integration

我注意到,每当我在配置为连接到不存在/不可用的主机/端口的TcpOutboundGateway上发送请求时,对请求的处理将挂起1分15秒,然后抛出以下异常...

java.net.ConnectException: Operation timed out (Connection timed out)

我希望减少那1分钟15秒的等待时间,但是还没有找到正确的方法。到目前为止,我已经尝试在TcpOutboundGateway上设置remoteTimeout,requestTimeout和sendTimeout,但似乎没有一个可以解决问题。

是否可以通过配置TcpOutboundGateway来减少抛出该异常之前等待的时间?如果可能的话,怎么办?


注意: 关于“不存在的主机/端口”,其中一个示例是在本地运行我的应用程序,并将TcpOutboundGateway配置为发送到127.0.0.3:2000

1 个答案:

答案 0 :(得分:2)

连接问题不是网关责任。真的是关于ConnectionFactory

请参见AbstractClientConnectionFactory

/**
 * Set the connection timeout in seconds. Defaults to 60.
 * @param connectTimeout the timeout.
 * @since 5.2
 */
public void setConnectTimeout(int connectTimeout) {

Althoug,由于我们要在下周才发布5.2,因此我认为您可能无法使用该版本。

对于当前的5.1.x版本,您需要扩展TcpNetClientConnectionFactory及其createSocket()来提供适当的连接超时:

public class MyTcpNetClientConnectionFactory extends TcpNetClientConnectionFactory {

    protected Socket createSocket(String host, int port) throws IOException {
        Socket socket = getTcpSocketFactorySupport().getSocketFactory().createSocket();
        socket.connect(new InetSocketAddress(host, port), 1000);
        return socket;
    }
}

}