有时当我通过RestTemplate发布API调用API时,我们会收到Socket Exception。
我们没有对RestTemplate使用setConnectionTimeout和setReadTimeout。
大多数时候(99%),API在没有套接字连接问题的情况下成功执行。但是,有时(1%)我们得到SocketException。
我做了分析,了解什么是默认的readtimeout& HttpUrlConnection的conntimeout。我看到超时都是0和不确定的超时。
这里没有防火墙问题,因为API大部分时间都成功执行99%。
如何调试此问题?对于HttpUrlConnection,默认的readtimeout和connectiontimeout是0吗?
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "{API url}": Connection reset; nested exception is java.net.SocketException: Connection reset
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:633) ~[spring-web-4.3.4.RELEASE.jar!/:4.3.4.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595) ~[spring-web-4.3.4.RELEASE.jar!/:4.3.4.RELEASE]
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:423) ~[spring-web-4.3.4.RELEASE.jar!/:4.3.4.RELEASE]
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209) ~[?:1.8.0_45]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_45]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[?:1.8.0_45]
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286) ~[?:1.8.0_45]
at java.io.BufferedInputStream.read(BufferedInputStream.java:345) ~[?:1.8.0_45]
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:704) ~[?:1.8.0_45]
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:647) ~[?:1.8.0_45]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1535) ~[?:1.8.0_45]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440) ~[?:1.8.0_45]
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[?:1.8.0_45]
at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:52) ~[spring-web-4.3.4.RELEASE.jar!/:4.3.4.RELEASE]