1.问题概述

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

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

  • 当项目刚启动时,数据库连接池的中的连接并不会创建;第一次请求的时候才会初始化各种池,连接准备等工作;所以导致了第一次初始化建立连接时间很长.feign觉得这个远程调用很久没有返回所以就超时了.

    feign默认超时等待是1s.如果1s没有返回数据,会重试几次;重试几次还没返回数据,就报错读取超时异常
思考一个问题:为啥Feign要设置超时时间呢?
  • 拿上图来说如果feign不设置超时时间,那么一旦商品微服务一致没有给订单微服务返回数据,订单微服务就会一直占用着一个线程;并且我们的系统远程调用有很多,如果是大量来了,很容易导致整个线程资源被占用完了,直接导致整个系统雪崩

3.解决办法

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

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

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

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

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

  • 所以后面的服务我们不配置,则使用的是上面默认的,如果想单独配置,则直接在配置文件中配置即可

Feign远程调用超时问题的更多相关文章

  1. SpringCloud(二) - Eureka注册中心,feign远程调用,hystrix降级和熔断

    1.项目模块介绍 2. 父项目 主要依赖 spring-cloud 的 版本控制 <properties> <!-- springCloud 版本 --> <scd.ve ...

  2. Feign远程调用 (介绍与使用)

    Feign远程调用 Feign是代替RestTemplate进行远程调用的组件,避免了RestTemplate手写复杂的url容易出错的问题,并提高代码的可读性 使用Feign步骤 1)引入依赖 哪个 ...

  3. Feign远程调用

    有关微服务中,服务与服务如何通信,我已经给大家介绍了Ribbon远程调用的相关知识,不知道大家有没有发现Ribbon的问题呢? Ribbon的问题 在Ribbon中,如果我们想要发起一个调用,是这样的 ...

  4. springcloud系列五 feign远程调用服务

    一:Feign简介 Feign 是一种声明式.模板化的 HTTP 客户端,在 Spring Cloud 中使用 Feign,可以做到使用 HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完 ...

  5. 【SpringCloud】(二)Eureka注册中心和Feign远程调用

    1 SpringCloud 核心 SpringCloud基于HTTP协议,这是和Dubbo最本质的区别,Dubbo的核心是RPC(远程方法调用) Eureka:注册中心 Ribbon:客户端负载均衡 ...

  6. feign远程调用出错

    如果你传递的参数,比较复杂时,默认会采用POST的请求方式. 传递单个参数时,推荐使用@PathVariable,如果传递的单个参数比较多,这里也可以采用@RequestParam,Feign接口中不 ...

  7. feign远程调用接口报空指针

    今天对feign接口进行转移的时候再次启动一直报空指针,找了好久试了好多次才发现是没有对feign接口加注解 请一定要记得加自动注入的注解啊啊啊啊啊啊!!!!!!!

  8. Feign远程调用源码阅读

  9. spring cloud eureka + feign,api远程调用

    网上教程不少,有些就是复制粘贴,不结合实际生产. eureka不再阐述. 一般正常开发会有多个工程,且多个module. 我的习惯是: eureka server.权限.config.gateway ...

  10. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

随机推荐

  1. pythonapi接口怎么对接?

    ​ Python API接口对接是使用Python语言开发应用程序时,与外部API接口进行交互的一种方式.API(应用程序接口)是一种定义了程序或系统如何与另一个程序或系统进行交互的协议.通过使用Py ...

  2. C# Wke例子 -- WebUI登录窗口

    概述 Wke介绍: http://blog.csdn.net/sabrecode/article/details/78145938 用Wke做了一个登录窗口, webui比较特殊. 因为它就是一个超文 ...

  3. k8s证书到期处理

    证书续期提示 当执行kubectl get nodes等提示 Unable to connect to the server: x509: certificate has expired or is ...

  4. 3 分钟把高质量 AI 知识库 FastGPT 装进企业微信

    FastGPT V4 已经上线,直接冲上 GitHub Trending. 如果你还不知道 FastGPT 是什么,可以先去看看作者的介绍 使用 FastGPT 构建高质量 AI 知识库 非常多的企业 ...

  5. 2023年Vue开发中的8个最佳工具

    前言 Vue.js,一款当今非常流行的基于JavaScript的开源框架,旨在构建动态的可交互应用. Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉.随着时间的推移,Vue不断进化 ...

  6. pbjs 无法编码 bytes 类型数据问题的解决方案

    问题背景 之前写过一篇<使用脚本收发 protobuf 协议数据>,通过 pbjs 命令可以将 protobuf 二进制数据转换为 json: > pbjs msg.proto -- ...

  7. SpringBoot进阶 CommandLineRunner 初始化配置

    在Spring Boot中,CommandLineRunner接口用于在应用程序启动后执行一些特定的命令行操作.通过实现CommandLineRunner接口,您可以在Spring Boot应用程序运 ...

  8. webgl centroid质心插值的一点理解

    质心插值说的是什么 2023.10.04再次review这个细节点: https://www.opengl.org/pipeline/article/vol003_6/ https://github. ...

  9. JDK对于Java的作用

    JDK是Java Development Kit的缩写,是Java的开发工具包(SDK).JDK 是整个 Java 的核心,包括 Java 运行环境(Java Runtime Envirnment,简 ...

  10. Go泛型解密:从基础到实战的全方位解析

    本篇文章深入探讨了Go语言的泛型特性,从其基础概念到高级用法,并通过实战示例展示了其在实际项目中的应用. 关注[TechLeadCloud],分享互联网架构.云服务技术的全维度知识.作者拥有10+年互 ...