我注意到,每当我在配置为连接到不存在/不可用的主机/端口的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
最佳答案
连接问题不是网关责任。它实际上是关于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;
}
}
}