1.起因
?????通过FeignClient指定服务名称,在从eureka获取一个服务的实例ip和端口,来调用某个接口获取数据出现,超时的情况! 在调用spu/page 接口出现超时的情况
feign.RetryableException: Read timed out executing GET http://item-service/spu/page?page=1&rows=100
设置Feign的配置接口
@FeignClient("item-service")//调用item-service服务
GoodsApi :里面定义了公共的接口,这样一来那些服务需要使用只要继承该接口就可以实现,里面配置的调用方法,这样一来以后需要新增加某个接口我只要在GoodsApi 中定义就可以,子类就会继承父类的方法!
2.排查
1.Eureka问题
一开始为以为是eureka服务没有被启动于是我就访问了eureka服务界面,可以看出服务是有启动的 并且我也在程序出现错误日志里面查看到了从eureka中获取到的服务地址
2.项目服务的问题
在想有没有可能是因为item-service服务的程序出现错误导致的超时,于是为就在服务调用的接口打上断点,可以看出请求已经到查询商品的服务接口了,也可以正常查询到数据,这个时候我就在想,有没有可能是因为为服务的接口查询的数据比较久(因为数据库是在外网不在本地可能网络原因导致查询慢)从而导致Feign以为服务超时了 并且我还通过浏览器访问,服务的ip:端口,查询了下数据页可以正常显示,就是慢了点
3.解决问题
如果是超时导致的那么我就只要设置下feign的超时时间就可以解决了,对配置文件(application.yml)中添加以下配置
feign:
client:
config:
default:
connectTimeout: 10000
readTimeout: 10000
接着为在运行测试用例,可以看出数据已经被获取到了
|