【问题标题】:How to decrease the timeout of a TcpOutboundGateway?如何减少 TcpOutboundGateway 的超时?
【发布时间】:2020-01-25 22:18:12
【问题描述】:

我注意到,每当我在配置为连接到不存在/不可用的主机/端口的 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

【问题讨论】:

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


    【解决方案1】:

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

    AbstractClientConnectionFactory:

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

    尽管如此,我知道您可能无法使用这个,因为我们将在下周发布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;
        }
    }
    

    }

    【讨论】:

    • 感谢 Artem 的回复。我相信您的 createSocket 覆盖解决方案现在可以解决问题。近期会关注 setConnectionTimeout 方法的发布。
    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 2013-08-25
    • 2017-09-08
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    相关资源
    最近更新 更多