【Spring Cloud】spring cloud 调用feign请求超时 feign.RetryableException: Read timed out executing POST

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【Spring Cloud】spring cloud 调用feign请求超时 feign.RetryableException: Read timed out executing POST

一、问题描述

Spring Cloud项目,两个微服务之间调用报错超时,控制台抛出异常,截取部分报错:

feign.RetryableException: Read timed out executing POST http://back-control-engine/client/v1.0/robotClient/robotTest

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

feign.RetryableException: Read timed out executing POST http://back-control-engine/client/v1.0/robotClient/robotTest
  at feign.FeignException.errorExecuting(FeignException.java:84)
  at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:113)
  at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:78)
  at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
  at com.sun.proxy.$Proxy234.robotTest(Unknown Source)
  at com.uiotsoft.back.brain.platform.business.service.impl.RobotClientServiceImpl.robotTest(RobotClientServiceImpl.java:28)
  at com.uiotsoft.back.brain.platform.controller.api.RobotClientController.voiceChatClient(RobotClientController.java:33)
  at com.uiotsoft.back.brain.platform.controller.api.RobotClientController$$FastClassBySpringCGLIB$$61a13ae5.invoke(<generated>)
  at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
  at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
  at com.uiotsoft.back.brain.platform.config.AopConfig.doAround(AopConfig.java:55)
  at sun.reflect.GeneratedMethodAccessor245.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
  at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
  at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1747)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
  at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: Read timed out
  at java.net.SocketInputStream.socketRead0(Native Method)
  at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
  at java.net.SocketInputStream.read(SocketInputStream.java:171)
  at java.net.SocketInputStream.read(SocketInputStream.java:141)
  at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
  at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
  at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
  at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735)
  at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
  at feign.Client$Default.convertResponse(Client.java:143)
  at feign.Client$Default.execute(Client.java:68)
  at org.springframework.cloud.openfeign.ribbon.RetryableFeignLoadBalancer$1.doWithRetry(RetryableFeignLoadBalancer.java:114)
  at org.springframework.cloud.openfeign.ribbon.RetryableFeignLoadBalancer$1.doWithRetry(RetryableFeignLoadBalancer.java:94)
  at rx.Observable.unsafeSubscribe(Observable.java:10327)
  at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)
  at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)
  at rx.Observable.unsafeSubscribe(Observable.java:10327)
  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
  at rx.Observable.subscribe(Observable.java:10423)
  at rx.Observable.subscribe(Observable.java:10390)
  at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:443)
  at rx.observables.BlockingObservable.single(BlockingObservable.java:340)
  at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112)
  at org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:83)
  ... 132 common frames omitted

二、问题原因

这是一个http请求报错超时,因为feign的调用分为两层:Ribbon的调用和Hystrix的调用,所以我们在配置文件中添加超时配置即可。高版本的Hystrix默认是关闭的,可以不设置。

三、解决方案

所以在 application.yml 配置文件中设置 ribbon 即可:

ribbon:
    # 请求处理的超时时间
    ReadTimeout: 60000
    # 请求连接的超时时间
    ConnectTimeout: 60000

或者 在 application.properties 配置文件中设置 ribbon

# 请求处理的超时时间
ribbon.ReadTimeout: 60000
# 请求连接的超时时间
ribbon.ConnectTimeout: 60000

完结!


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8月前
|
缓存
SpringCloud Gateway 网关的请求体body的读取和修改
SpringCloud Gateway 框架中,为了处理请求体body,实现多次读取与修改,创建了一个名为`RequestParamGlobalFilter`的全局过滤器。这个过滤器使用`@Component`和`@Slf4j`注解,实现了`GlobalFilter`和`Ordered`接口,设置最高优先级以首先读取body。它通过缓存请求体并创建装饰过的`ServerHttpRequest`来实现body的动态获取。
1158 4
|
4月前
|
缓存 安全 Java
Spring Get请求 与post请求
本文详细介绍了Spring框架中GET请求和POST请求的区别及应用场景。GET请求用于从服务器获取资源,参数附在URL末尾,适合查看非敏感信息;POST请求用于向服务器提交数据,参数在请求体中传输,适合处理敏感信息。Spring通过`@GetMapping`和`@PostMapping`注解分别处理这两种请求。此外,文章还提供了示例代码,展示了如何在Spring中实现这两种请求的处理。最后,文章总结了推荐使用POST请求的原因,包括更高的安全性、更大的数据传输量、更好的幂等性及灵活性。
Spring Get请求 与post请求
|
3月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
153 1
|
8月前
|
应用服务中间件 nginx 微服务
SpringCloud解决feign调用token丢失问题
【5月更文挑战第2天】在feign调用中可能会遇到如下问题: * 同步调用中,token丢失,这种可以通过创建一个拦截器,将token做透传来解决 * 异步调用中,token丢失,这种就无法直接透传了,因为子线程并没有**token**,这种需要先将token从父线程传递到子线程,再进行透传
493 3
|
4月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
4月前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
691 2
|
4月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
791 0
|
5月前
|
负载均衡 Java API
深度解析SpringCloud微服务跨域联动:RestTemplate如何驾驭HTTP请求,打造无缝远程通信桥梁
【8月更文挑战第3天】踏入Spring Cloud的微服务世界,服务间的通信至关重要。RestTemplate作为Spring框架的同步客户端工具,以其简便性成为HTTP通信的首选。本文将介绍如何在Spring Cloud环境中运用RestTemplate实现跨服务调用,从配置到实战代码,再到注意事项如错误处理、服务发现与负载均衡策略,帮助你构建高效稳定的微服务系统。
127 2
|
6月前
|
Java 微服务 Spring
SpringCloud gateway自定义请求的 httpClient
SpringCloud gateway自定义请求的 httpClient
246 3
|
7月前
|
XML JSON Java
经验大分享:SpringCloud之Feign
经验大分享:SpringCloud之Feign
85 0