如何设置OpenFeign请求超时

news2024/9/23 17:14:08

Feign和OpenFeign介绍

Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。

但遗憾的是Feign现在停止迭代了。:OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

OpenFeign设置超时

 前面简单介绍了Feign和OpenFeign的关系,言归正传,接下来我们看看OpenFeign如何设置调用超时,openFeign其实是有默认的超时时间的,默认分别是连接超时时间10秒、读超时时间60秒,源码在feign.Request.Options#Options()这个方法中。

  public static class Options {

    private final int connectTimeoutMillis;
    private final int readTimeoutMillis;

    public Options(int connectTimeoutMillis, int readTimeoutMillis) {
      this.connectTimeoutMillis = connectTimeoutMillis;
      this.readTimeoutMillis = readTimeoutMillis;
    }

    public Options() {
      this(10 * 1000, 60 * 1000);
    }

    /**
     * Defaults to 10 seconds. {@code 0} implies no timeout.
     *
     * @see java.net.HttpURLConnection#getConnectTimeout()
     */
    public int connectTimeoutMillis() {
      return connectTimeoutMillis;
    }

    /**
     * Defaults to 60 seconds. {@code 0} implies no timeout.
     *
     * @see java.net.HttpURLConnection#getReadTimeout()
     */
    public int readTimeoutMillis() {
      return readTimeoutMillis;
    }
  }

openFeign集成了Ribbon,Ribbon的默认超时连接时间、读超时时间都是是1秒,源码在org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer#execute()方法中

	@Override
	public RibbonResponse execute(RibbonRequest request, IClientConfig configOverride)
			throws IOException {
		Request.Options options;
		if (configOverride != null) {
			options = new Request.Options(
					configOverride.get(CommonClientConfigKey.ConnectTimeout,
							this.connectTimeout),
					(configOverride.get(CommonClientConfigKey.ReadTimeout,
							this.readTimeout)));
		}
		else {
			options = new Request.Options(this.connectTimeout, this.readTimeout);
		}
		Response response = request.client().execute(request.toRequest(), options);
		return new RibbonResponse(request.getUri(), response);
	}

源码大致意思:如果openFeign没有设置对应得超时时间,那么将会采用Ribbon的默认超时时间。理解了超时设置的原理,由之产生两种方案也是很明了

1、设置Ribbon的超时时间(不推荐)

设置很简单,在配置文件中添加如下设置:

ribbon.ConnectTimeout=60000
ribbon.ReadTimeout=60000

2、设置openFeign的超时时间(推荐)

openFeign设置超时时间非常简单,只需要在配置文件中配置,如下:

feign.client.config.default.connectTimeout=60000
feign.client.config.default.readTimeout=60000

default设置的是全局超时时间,对所有的openFeign接口服务都生效,但是正常的业务逻辑中可能涉及到多个openFeign接口的调用,如下图:

上图中的伪代码如下:

public T invoke(){
    //1. 调用serviceA
    serviceA();
    
    //2. 调用serviceB
    serviceB();
    
    //3. 调用serviceC
    serviceC();
}

那么上面配置的全局超时时间能不能通过呢?很显然是serviceAserviceB能够成功调用,但是serviceC并不能成功执行,肯定报超时。此时我们可以给serviceC这个服务单独配置一个超时时间,配置如下:

feign.client.config.default.connectTimeout=1000
feign.client.config.default.readTimeout=1000
feign.client.config.ServiceC.connectTimeout=30000
feign.client.config.ServiceC.readTimeout=30000

单个配置的超时时间将会覆盖全局配置。 看到这里,不知道大家清不清楚请求调用为啥要设置超时,不设置请求超时会有啥问题?欢迎评论区交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

byzer笔记本使用

byzer笔记本使用 数据源的定义 对于etl,起始的第一步往往是定义一个数据来源。 设置数据源 通过设置 -> 外部数据源 -> 新增可以新增jdbc类型的数据源。 命令指定数据源 notebook中可以使用connect命令进行jdbc数据源的指定: > SET user"root&q…

Elasticsearch(四)--一文弄懂ES的映射操作

一、前言 上一章学习了ES的索引相关操作,那么这一章就轮到映射,了解映射操作最重要的点就是去学习ES的数据类型。那么本章我们会了解到映射的创建、查看和修改操作,然后详细介绍ES中的基本数据类型和复杂的数据类型,并且会对常用…

解决ElementUI导航栏重复点菜单报错问题

在使用ElementUI中的导航时,默认情况下如果重复点击某选项,会报错。 element-ui.common.js?b705:3354 Error: Avoided redundant navigation to current location: “/home/home1”. at createRouterError (vue-router.esm.js?8c4f:2060) at createNa…

Java IO流 - 打印流详细使用介绍

文章目录打印流打印流基本使用输出语句重定向打印流 打印流基本使用 打印流: 作用:打印流可以实现更方便、更高效的打印数据到文件中去。打印流一般是指:PrintStream,PrintWriter两个类。 可以实现打印什么数据就是什么数据,例如…

【GD32F427开发板试用】06-硬件I2C软件I2C驱动0.91OLED

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:Stark_GS I2C 简介及特点 并行总线至 I2C 总线协议的转换及接口;同一接口既可实现主机功能又可实现从机功能;主从机之…

在线教育-谷粒学院学习笔记(四)

文章目录1 内容介绍2 阿里云存储OSS3 Java代码操作阿里云oss4 搭建阿里云oss项目环境5 上传头像后端实现6 Nginx使用7 上传头像前端实现8 课程分类管理介绍9 EasyExcel工具10 课程分类添加功能1 内容介绍 添加讲师实现头像上传功能 阿里云oss存储服务 添加课程分类功能 使用Ea…

欧拉的“她力量”,如何为品牌注入新能量?

文|智能相对论作者| Kinki近日,百度营销联合CBNData推出的《2022新能源汽车趋势洞察》正式发布,报告显示,随着新能源汽车的普及,新中产女性已成为了“消费新势力”。女性更偏爱新能源汽车已不是新鲜观点,调研显示&…

物理主机telenet登录ensp虚拟网络设备并显示配置python脚本

一、物理主机telnet登录ensp虚拟网络设备 1、物理主机配置 1.1、物理主机环回口虚拟网卡配置 见本人博客:Ensp用windows回环口连接cloud配置_ensp环回口配置_林锋Space的博客-CSDN博客https://liulinfeng.blog.csdn.net/article/details/128098737 1.2、物理主机telnet开启 …

大数据的整体见解

如何建设高效的数据模型体系,使数据易用,避免重复建设和数据不一致性,保证数据的规范性;如何提供高效易用的数据开发工具;如何做好数据质量保障;如何有效管理和控制日益增长的存储和计算消耗;如…

文件下载 response响应ContentType与a标签download属性

参考资料 MediaType介绍了解HTML/HTML5中的download属性header中Content-Disposition的作用 目录一. ContentType二. a标签download属性2.1 下载同源静态资源文件2.2 后台可省略Content-Disposition一. ContentType 我们在进行文件下载的时候,后端往往需要通过如下…

CSRF(跨站请求伪造)

一、csrf是什么CSRF(Cross Site Request Forgery,跨站请求伪造)。是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。原理是攻击者构造网站后台某个功能接口的请求地址,诱导用户去点击或者用特…

uni-app 中实现文件和图片的上传-H5

之前写过一篇上传的文章📕,但是那篇文章仅仅只能实现上传图片的功能,而且代码写的比较乱,看起来很繁杂,最近有幸又遇到了上传图片和文件的需求,在完成这个功能后,整理一下,希望能给需…

第十四届蓝桥杯单片机组学习笔记(2):按键

第十四届蓝桥杯单片机组学习笔记(2):按键前言区分高低电平驱动按键消抖软件消抖触发处理的方式矩阵键盘最简单常用的人机交互手段——按键 前言 实现按键检测需要解决的问题: 按键是低电平按下还是高电平按下;按键消…

(1分钟速览)KBM-SLAM 论文阅读笔记

编辑切换为居中添加图片注释,不超过 140 字(可选)这篇博客记录了上面这篇论文的学习笔记。编辑切换为居中添加图片注释,不超过 140 字(可选)这个是本文的摘要,一眼开过去就是单目slam当今所遇到…

机器学习(一):人工智能概述

文章目录 人工智能概述 一、人工智能应用场景 二、人工智能小案例 三、人工智能发展必备三要素 四、人工智能、机器学习和深度学习 人工智能概述 一、人工智能应用场景 二、人工智能小案例 案例一 学习链接:https://quickdraw.withgoogle.com 案例二 学习链…

老杨说运维 | 2023,浅谈智能运维趋势(三)

文末附有视频回顾 前言: 在回顾(一)中,老杨提到的智能运维发展趋势中,面对国际化形势不确定的情况,信创部分的比例要求正在递增。作为国家经济发展的新动能,信创发展已步入深水区,智…

cv2.imread()、cv2.putText、cv2.imwrite()、cv2.waitKey()

cv2cv2.imread()cv2.putText()cv2.imwrite()cv2.waitKey()cv2.imread() 用于读取图像数据案例演示: import cv2# ouput img properties img_pathC:/Users/WHY/Pictures/Saved Pictures/OIP-C (1).jfif def funOutput…

安卓手机使用Linux Deploy安装CentOS

目录 前言 准备工作 实践 busybox安装 安装并配置Linux Deploy 局域网使用ssh连接服务器 公网使用ssh连接服务器 环境安装 写在最后 前言 最近沉迷于服务器搭建,书接上文,在安卓高版本中成功安装了服务器,但是安卓低版本的却一言难尽…

2023CUPT第七题 法拉第波 思路和解法

本文未完原题A droplet of less viscous liquid floating in a bath of a more viscous liquid develops surprising wave- like patterns when the entire system is set into vertical oscillation. Investigate this phenomenon and the parameters relevant to the product…

Webpack学习笔记

Webpack学习笔记1.引言2.Webpack相关的基础性问题3.Webpack的使用4.Webpack与代码规范和兼容性5.优化Html入口文件的处理6.实现webpack热更新7.生产模式与开发模式分析8.优化css配置,避免闪频现象9.代码压缩1.引言 最近想来自己对于前端的学习还是有很多的不足&…