当前位置: 首页 > news >正文

OpenFeign终极指南:超时控制、重试策略、拦截器与自定义Starter

目录

前言

使用

引入依赖

开启feign

编写feign客户端

效果

日志

超时配置

重试机制

拦截器

Fallback兜底返回

引入依赖

编写兜底实现

连接池

引入依赖

开启连接池

制作OpenFeign Starter

编写配置类

自动装配


前言

在RPC框架中,有openFeignDubbo,openFeign是SpringCloud的,而Dubbo是

SpringCloudalibaba的,我们讲解openFeign,博主所在公司用的RPC框架也是openFeign,

几个系统之间相互进行PRC调用,通过制作openFeign starter推送到远程仓库,然后通过maven引

用使用feign客户端进行调用。

SpiringCloud openFeign官网:openFeign

使用

引入依赖

引入spring-cloud-starter-openfeignspring-cloud-starter-loadbalancer依赖,引入spring-cloud-

starter-loadbalancer主要是做负载均衡,他是一个负载均衡器,在旧版本用的是Ribbon,新版本用

的是这个loadbalancer,当有多个服务实例的时候,根据负载均衡算法自动选取一个,默认是轮

询。

开启feign

@EnableFeignClients:启用Feign客户端功能,扫描并注册@FeignClient接口,生成代理类。

编写feign客户端

@FeignClient:nacos对应的服务名称(会根据服务名称找到ip+端口 进行RPC调用)

效果

订单服务通过openFeign调用商品服务

日志

如果我们想看调用过程中的详细日志,我们可以配置openFeign日志,查看到详细信息。

配置文件中配置feign包下的日志级别为debug,定义一个Bean返回Logger.Level.FULL,表示设置Feign客户端日志级别为FULL,记录所有请求和响应的详细信息。(生产中一般不开启feign日志)

超时配置

如果请求都超时,在高并发的情况下,请求都阻塞在哪里就会对服务造成雪崩。我们可以对服务超

时进行一些配置,超时配置有连接超时和读取超时,连接超时默认10秒,读取超时默认60秒。

配置连接超时和读取超时,如没有配置默认使用default默认的配置。

重试机制

openFeign默认是不重试的,可以在配置文件中配置重试机制,如果openFeign在IOC容器里面找

到,会使用IOC里面的配置的。

拦截器

openFeign提供了拦截器,可以对请求和响应进行拦截处理,一般我们进行请求拦截器处理,实现

RequestInterceptor接口,在apply方法里面添加请求,可以在配置文件中配置,如果配置文件不配

置,放到IOC容器,他会在IOC容器里面拿到。

Fallback兜底返回

引入依赖

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

编写兜底实现

连接池

openFeign默认是不支持连接池的,这样就会导致在高并发场景下,性能不是很好,频繁创建连接

和销毁连接,我们可以配置连接池来提供性能、优化资源利用。

openFeign底层发起http请求,依赖其他框架。其底层支持的http客户端实现包括:

  • HttpURLConnection:默认实现,不支持连接池
  • Apache HttpClient:支持连接池
  • OKHttp:支持连接池

openFeign整合OKHttp的步骤如下:

引入依赖

开启连接池

制作OpenFeign Starter

制作openFegin Starter推送到maven私服仓库,其他项目就可以引用调用feign客户端。

编写配置类

启用对Feign客户端支持。

自动装配

编写自动装配配置,springboot2.X和springboot3.X都进行配置,确保能够自动装配进去。

相关文章:

  • VBA 调用 dll 优化执行效率
  • Linux字符设备驱动
  • Linux下 文件的查找、复制、移动和解压缩
  • Linux压缩与解压命令完全指南:tar.gz、zip等格式详解
  • 使用EXCEL绘制平滑曲线
  • 【开发心得】Dify部署ollama模型的坑[8]
  • 【后端】【python】Python 爬虫常用的框架解析
  • Python字典深度解析:高效键值对数据管理指南
  • 在统信UOS1060中将MP3MP4格式转换为Ogg Vorbis格式
  • 基于autoware.1.14与gazebo联合仿真进行Hybrid A* 算法规划控制代价地图版
  • websocket和SSE学习记录
  • 使用Spring Validation实现参数校验
  • Step文件无法编辑怎么办?
  • System.in 详解
  • 个人自用-导入安装Hexo
  • Java 内存优化:如何避免内存泄漏?
  • React-useImperativeHandle (forwardRef)
  • CRT(阴极射线管)终端控制器
  • 手动实现LinkedList
  • 【算法数据结构】leetcode37 解数独
  • 刘国梁:奥运会乒乓球项目增至六金,国乒机遇与挑战并存
  • 河北衡水中学再换校长
  • 陕西省药监局:未检出巨子生物“可复美”存在“表皮生长因子”
  • 2025年中国航天工程有哪些重点任务?国家航天局介绍
  • 最高检:一些不法分子以婚介之名实施诈骗,亟待治理和规范
  • 陈少洋出任中国航天科工集团党组副书记、董事、总经理