【问题标题】:Getting exception is java.net.SocketException: Connection reset [duplicate]获取异常是 java.net.SocketException:连接重置 [重复]
【发布时间】:2018-10-07 23:49:44
【问题描述】:

调用 POST API 时出现 SocketException 但是,我的客户端机器在 VPC(虚拟私有云)下,而服务器在开放云中(没有任何防火墙)。

当我们调用这个 API 时,我们会在一毫秒内得到异常

我的客户端配置如下

request.timeout.in.ms=10000
连接.timeout.in.ms=10000
socket.timeout.in.ms=600000
max.total.connection=100
max.per.route=100

注意:此异常在中间发生(并非总是)

请帮帮我

下面是堆栈跟踪

org.springframework.web.client.ResourceAccessException:对“http://xxxxxxxx:8080/resources/internal/xxx/xxx/xxx”的 POST 请求的 I/O 错误: 连接重置;嵌套异常是 java.net.SocketException: Connection reset 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:666) 在 org.springframework.web.client.RestTemplate.execute(RestTemplate.java:613) 在 org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:407) 在 com.my.org.ext.client.RestClient.aggregate(RestClient.java:78) 在 com.my.org.ext.service.PExternalServiceImpl.aggregate(PExternalServiceImpl.java:164) 在 sun.reflect.GeneratedMethodAccessor270.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 在 com.sun.proxy.$Proxy145.aggregate(未知来源) 在 com.my.org.ext.service.ExternalServiceImpl.receiveMessage(ExternalServiceImpl.java:534) 在 sun.reflect.GeneratedMethodAccessor265.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:180) 在 org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:112) 在 org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:48) 在 org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:174) 在 org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:72) 在 org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:47) 在 org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:764) 在 org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:708) 在 org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:544) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748) 引起:java.net.SocketException:连接重置 在 java.net.SocketInputStream.read(SocketInputStream.java:210) 在 java.net.SocketInputStream.read(SocketInputStream.java:141) 在 org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) 在 org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) 在 org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:282) 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) 在 org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) 在 org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) 在 org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) 在 org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:165) 在 org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) 在 org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) 在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272) 在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) 在 org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) 在 org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) 在 org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) 在 org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:89) 在 org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) 在 org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:652) ...省略了28个常用框架,

我通过What's causing my java.net.SocketException: Connection reset? 但我不确定到底是什么问题以及如何解决。

【问题讨论】:

  • 你找到答案了吗?我们间歇性地发生这种情况。谢谢
  • 是的,在为 RestTemplate bean 创建 HttpClient 时,我添加了 evictIdeleConnection 属性并且它起作用了,我再也没有收到这个异常了。 HttpClients.custom().setDefaultRequestConfig(requestConfig) .setConnectionManager(connManager) .evictIdleConnections(IDLE_CONNECTION_WAIT_TIME, TimeUnit.SECONDS).build();
  • 谢谢,我试试看。

标签: java spring rest networking vpc


【解决方案1】:

连接重置可能有很多原因。但我的建议是尝试对空闲连接进行连接驱逐。当您使用陈旧的连接调用时,连接重置可以从服务器或客户端进行。

【讨论】:

  • 知道如何解决此类问题吗?
【解决方案2】:

似乎有些网络问题。首先检查没有 java telnet YOUR_IP 8080 的连接或使用 curl curl YOUR_IP:8080

【讨论】:

  • 如果存在网络问题,那么所有请求都不会成功,但是,在我的情况下,一些请求面临这个问题,其中大多数都必须成功。
猜你喜欢
  • 2016-08-27
  • 1970-01-01
  • 2019-06-13
  • 2010-09-08
  • 2021-03-10
相关资源
最近更新 更多