Feign由于调用服务出现超时导致的问题

文章目录

    • 1.起因
    • 2.排查
      • 1.Eureka问题
      • 2.项目服务的问题
    • 3.解决问题

1.起因

     通过FeignClient指定服务名称,在从eureka获取一个服务的实例ip和端口,来调用某个接口获取数据出现,超时的情况!
在调用spu/page接口出现超时的情况

feign.RetryableException: Read timed out executing GET http://item-service/spu/page?page=1&rows=100

Feign由于调用服务出现超时导致的问题_第1张图片
设置Feign的配置接口

@FeignClient("item-service")//调用item-service服务

Feign由于调用服务出现超时导致的问题_第2张图片
GoodsApi:里面定义了公共的接口,这样一来那些服务需要使用只要继承该接口就可以实现,里面配置的调用方法,这样一来以后需要新增加某个接口我只要在GoodsApi中定义就可以,子类就会继承父类的方法!
Feign由于调用服务出现超时导致的问题_第3张图片

2.排查

1.Eureka问题

一开始为以为是eureka服务没有被启动于是我就访问了eureka服务界面,可以看出服务是有启动的
Feign由于调用服务出现超时导致的问题_第4张图片
并且我也在程序出现错误日志里面查看到了从eureka中获取到的服务地址
在这里插入图片描述

2.项目服务的问题

在想有没有可能是因为item-service服务的程序出现错误导致的超时,于是为就在服务调用的接口打上断点,可以看出请求已经到查询商品的服务接口了,也可以正常查询到数据,这个时候我就在想,有没有可能是因为为服务的接口查询的数据比较久(因为数据库是在外网不在本地可能网络原因导致查询慢)从而导致Feign以为服务超时了
Feign由于调用服务出现超时导致的问题_第5张图片
并且我还通过浏览器访问,服务的ip:端口,查询了下数据页可以正常显示,就是慢了点
Feign由于调用服务出现超时导致的问题_第6张图片

3.解决问题

如果是超时导致的那么我就只要设置下feign的超时时间就可以解决了,对配置文件(application.yml)中添加以下配置

feign:
  client:
    config:
      default:
        connectTimeout: 10000 #单位毫秒
        readTimeout: 10000 #单位毫秒

接着为在运行测试用例,可以看出数据已经被获取到了
Feign由于调用服务出现超时导致的问题_第7张图片

你可能感兴趣的:(java开发知识,架构知识,中间件,eureka,开发语言,微服务)