c语言中错误executing,RetryableException: Read timed out executing POST 问题解决

我们项目springcloud  feign+ribbon+consul+zuul,正常的点击访问没有问题,

当进行jemeter压力测试的时候,一旦并发上去,访问此时超过100多万以后,就会出现以下错误:

Caused by: feign.RetryableException: Read timed out executing POST http://。。。。

at feign.FeignException.errorExecuting(FeignException.java:132) ~[feign-core-10.2.3.jar!/:na]

at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113) ~[feign-core-10.2.3.jar!/:na]

at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78) ~[feign-core-10.2.3.jar!/:na]

at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-10.2.3.jar!/:na]

at com.sun.proxy.$Proxy144.foreignExchange(Unknown Source) ~[na:na]

at sun.reflect.GeneratedMethodAccessor87.invoke(Unknown Source) ~[na:na]

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]

... 60 common frames omitted

Caused by: java.net.SocketTimeoutException: Read timed out

at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_11]

at java.net.SocketInputStream.read(SocketInputStream.java:150) ~[na:1.8.0_11]

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_11]

at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_11]

at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]

at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.9.RELEASE.jar!/:5.1.9.RELEASE]

at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) ~[spring-webmvc-5.1.9.R

经过网络查询排查给的方案是配ribbon的超时时间:

#hystrix的超时时间

hystrix:

command:

default:

execution:

timeout:

enabled: true

isolation:

thread:

timeoutInMilliseconds: 30000

#ribbon的超时时间

ribbon:

ReadTimeout: 30000

ConnectTimeout: 30000

于是按照这个方法做了修改,但是没有效果。

最后再排查的时候发现Caused by: java.net.SocketTimeoutException: Read timed out的原因是由于http访问的SocketTimeout没有配,所以就想办法把sockeTimeout的参数配上具体如下:

RequestConfig requestConfig = RequestConfig.custom()

.setConnectionRequestTimeout(30000) //从连接池中获取连接的超时时间//与服务器连接超时时间:httpclient会创建一个异步线程用以创建socket连接,此处设置该socket的连接超时时间.setConnectTimeout(30000)

.setSocketTimeout(30000) //socket读数据超时时间:从服务器获取响应数据的超时时间.build();HttpClient httpClient = HttpClientBuilder.create()

.setMaxConnTotal(500) //连接池中最大连接数/*** 分配给同一个route(路由)最大的并发连接数。* route:运行环境机器 到 目标机器的一条线路。* 举例来说,我们使用HttpClient的实现来分别请求 www.baidu.com 的资源和 www.bing.com 的资源那么他就会产生两个route。*/.setDefaultRequestConfig(requestConfig)

.build();HttpComponentsClientHttpRequestFactory httpRequestFactory = newHttpComponentsClientHttpRequestFactory();httpRequestFactory.setReadTimeout(60000);httpRequestFactory.setConnectTimeout(60000);httpRequestFactory.setHttpClient(httpClient);

然后再跑测试,次问题就解决了;

最后看了下异常信息, Read timed out executing POST 的原因是由于下边的Caused by: java.net.SocketTimeoutException: Read timed out导致的,所以只要把下边的socket的超时问题解决,上边的timeout问题也就会解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: feign.retryableexception: read timed out executing post 是一个错误提示,意思是在执行 post 请求时读取超时了。可能是因为网络连接不稳定或者服务器响应时间过长导致的。建议检查网络连接和服务器状态,或者尝试增加请求超时时间。 ### 回答2: "feign.retryableexception: read timed out executing post" 这个错误信息通常是由于Feign客户端在执行POST请求时,读取响应超时了而导致的。Feign客户端是一个服务消费者,它能够通过像发送HTTP请求一样发送请求到服务提供方,并获取到响应结果。在Feign,当执行POST请求时,客户端会等待服务提供方响应的结果,当等待的时间超过了指定的时间,就会出现"read timed out executing post"这个错误信息。 这个问题一般会发生在网络环境比较复杂或者网络质量比较差的情况下。解决这个问题的方法有以下几种: 一、增加连接超时时间和读取超时时间。可以通过配置Feign客户端的连接超时时间和读取超时时间来解决这个问题。例如,将连接超时时间设置为30秒,读取超时时间设置为60秒,以防止由于响应慢而出现timeout异常。 二、检查网络和服务提供方是否正常。timeout异常有可能是服务提供方出现问题导致的,因此我们需要检查服务提供方是否可用,网络是否稳定,防止因网络问题而出现的timeout异常。 三、设计前端重试机制。对于网络环境不稳定的场景,我们可以设计前端重试机制来解决这个问题。例如,当出现timeout异常时,可以让客户端重试一定次数,或者等待一段时间再进行下一次尝试。 在实际的开发,我们应该根据实际的需求和环境去选择合适的解决方案,以保证系统的可靠性和稳定性。 ### 回答3: Feign是一个使用Java编写的HTTP客户端框架,它可以帮助我们在客户端定义我们的API接口,同时也可以处理服务器的返回结果。在使用Feign时,有时会遇到一个错误,即“feign.retryableexception: read timed out executing post”。这个错误通常是由服务器响应过慢或者网络故障引起的。如果我们在使用Feign时遇到了这个错误,可以通过以下几种方式来解决: 第一种方法是增加超时时间。在Feign,默认的超时时间是10秒钟,如果服务器响应时间超过了这个时间,就会抛出“read timed out”异常。可以通过在@FeignClient注解设置connectTimeout和readTimeout参数来增加超时时间,例如: @FeignClient(name = "service", url = "http://localhost:8080", connectTimeout = 5000, readTimeout = 5000) 这个示例将连接超时时间和读取超时时间都设置为5秒钟。 第二种方法是检查服务器的响应时间。如果服务器响应时间过长,也会导致Feign超时并抛出异常。可以通过使用类似curl或者Postman这样的工具,来测试服务端的响应时间,并对服务器性能进行优化。 第三种方法是检查网络连接。如果网络连接不稳定,也可能导致Feign超时并抛出异常。可以通过ping命令或者其他网络连接测试工具来检查网络连接质量。 最后,还可以通过捕获异常并重试来解决这个问题。可以在Feign调用的方法,使用try-catch语句捕获Feign.RetryableException异常,并进行重试操作。可以使用Spring Retry等框架来实现重试机制。 总结来说,Feign.retryableexception: read timed out executing post这个错误通常是由服务器响应过慢或者网络故障引起的。在使用Feign时,可以通过增加超时时间、优化服务器性能、检查网络连接、以及捕获异常并重试等方式来解决这个问题。希望本回答对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值