Feign远程调用超时问题

1.问题概述

image

  • 上图的场景,每次重启项目后openFeign都会报一个超时异常,异常信息如下
    image

2.为什么会产生这个异常?

  • 当项目刚启动时,数据库连接池的中的连接并不会创建;第一次请求的时候才会初始化各种池,连接准备等工作;所以导致了第一次初始化建立连接时间很长.feign觉得这个远程调用很久没有返回所以就超时了.
    feign默认超时等待是1s.如果1s没有返回数据,会重试几次;重试几次还没返回数据,就报错读取超时异常
思考一个问题:为啥Feign要设置超时时间呢?
  • 拿上图来说如果feign不设置超时时间,那么一旦商品微服务一致没有给订单微服务返回数据,订单微服务就会一直占用着一个线程;并且我们的系统远程调用有很多,如果是大量来了,很容易导致整个线程资源被占用完了,直接导致整个系统雪崩

3.解决办法

方式1:在远程调用的接口参数上指定Request.Options options:超时时间

image

image

方式2:在调用方配置文件设置超时时间

feign:
  client:
    config:
      qiuqiu: # 微服务客户端名
        connectTimeout: 5000 # 连接超时时间(建立连接的时间)
        readTimeout: 5000 # 读取超时时间(读取数据的时间)

方式3:方式2是可以解决的,但是怎么设置每个服务都要配置很麻烦,所以全局配置它来了!!!

  • 因为我项目中用的是nacos配置中心,所以我把这段配置加入到nacos配置中心进行管理
feign:
  client:
    config:
      default: # 指定默认的配置,这样其他所有调用此服务的feign客户端配置都是这个配置
        connectTimeout: 5000 # 连接超时时间(建立连接的时间)
        readTimeout: 5000 # 读取超时时间(读取数据的时间)

image

  • 所以后面的服务我们不配置,则使用的是上面默认的,如果想单独配置,则直接在配置文件中配置即可
posted @   我也有梦想呀  阅读(2929)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示