1、报错日志如下:
Binary data
2020-11-11 19:47:07.894 ERROR c.n.c.c.r.e.GlobalExceptionHandler:72 - errorMsg=Read timed out executing GET http://XXXXXXX,innerCode=5000,exception={}
feign.RetryableException: Read timed out executing GET http:// XXXXXXXX
at feign.FeignException.errorExecuting(FeignException.java:132)
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMet
解决方案
首先,我们看下Feign的简介
Feign 是一个声明式的web服务客户端,这便得编写web服务客户端更容易,使用Feign 创建一个接口并对它进行注解,它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka
提供的负载均衡的HTTP客户端 Feign.
即,Feign接口调用分两层,Ribbon的调用
和Hystrix调用
,理论上设置Ribbon的时间
即可,但是Ribbon的超时时间和Hystrix的超时时间需要结合起来,按照木桶原则
最低的就是Feign的超时时间,建议最好配置超时时间一致
。经过配置一下application设置后,完美解决了问题。因为第三方接口中需要3~50秒不等的时间,所以这个数值也是根据自己的业务系统情况设置的。
看了下配置文件,好像配置了时间相关的参数,中间带有横杠 "-", 比如:read-timeout ,仔细一查,此类参数在nacos环境下失效,只能用 ReadTimeout 这种,试了一下果然如此,成功解决。
application.yml
#ribbon的超时时间
ribbon:
# read-timeout: 60000 失效参数
# connect-timeout: 60000 失效参数
ReadTimeout: 60000
ConnectTimeout: 60000
2、用nacos做注册中心,报错日志如下:
feign.FeignException$ServiceUnavailable: [503] during [POST] to [http://localhost:30000/api/dbsource//exist?tenantId=test]
[ErpxDbSourceClient#boolExistDb(String)]:
[{"timestamp":"2022-09-07T03:32:53.168+00:00","path":"/api/dbsource//exist","status":503,"error":"Service Unavailable","requestId":"505fb311"}]
at feign.FeignException.serverErrorStatus(FeignException.java:237)
503 没有找到启动的服务,原因如下:
1)、需要调用的服务没有启动
2)、启动的服务和网关服务没有在一个组里,导致服务注册时没有拉取到。
3)、网关服务少引入jar了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
参考文章
3、报错日志:
原因被调用的服务已经启动(别人本地服务也注册了),导致fegin 调用时调到了别人的服务,给自己造成了困扰、怎么解决呢?分组策略如下:
怎么分组有两个方案:
1)、自己单独创建一个group组;
2)、yaml配置里面添加一个新组,discovery.group.nandao-dev
后期持续更新,继续分享,敬请期待。