当前位置: 首页 > 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都进行配置,确保能够自动装配进去。

http://www.xdnf.cn/news/36181.html

相关文章:

  • Stable Diffusion秋叶整合包V4独立版Python本地API连接指南
  • 《Operating System Concepts》阅读笔记:p738-p747
  • 《C#数据结构与算法》—集合、映射
  • 基于Spring AI与OpenAI API的深度实践:调用DeepSeek模型构建智能应用全指南
  • Win10驱动程序强制签名怎么禁用/开启?
  • C++按位与()、按位或(|)和按位异或(^)
  • 并发网路通信-套接字通信
  • 【数学】数学分类
  • 日志分析---宝瓜Windows日志分析器
  • 什么是 Stream
  • Vue3 + TypeScript中defineEmits 类型定义解析
  • [oeasy]python089_列表_删除列表项_remove_列表长度_len
  • 纯FPGA实现驱动AD9361配置的思路和实现之一 概述
  • 从数据处理方式,系统可扩展性和处理性能三方面比较管道过滤器风格和仓储风格
  • Python Requests 库:从安装到精通
  • Dijkstra 算法
  • 蓝桥杯练习题2
  • 深入理解 Spring 单元测试:@SpringBootTest、@Value 注入、@MockBean 使用实战与陷阱
  • 计算机网络八股——HTTP协议与HTTPS协议
  • Python爬虫-爬取猫眼演出数据
  • DataWhale AI春训营 问题汇总
  • 3. 在 2节的基础上 ,实现launch文件简单编写
  • MySql Innodb存储引擎下sql优化
  • 【leetcode刷题日记】lc.322-零钱兑换
  • 自动驾驶---决策规划之导航增强端到端
  • [CPP6] string模拟实现
  • 【Ubuntu】Ubuntu20.04安装搜狗输入法的详细步骤
  • STL之vector基本操作
  • JVM虚拟机--JVM的组成
  • 自动化测试 VS 测试开发