Spring Cloud 系列之服务调用 OpenFeign的实现
1.1 简介

1.1.1 概述
Feign 旨在使编写 Java Http 客户端变得更容易。在使用 Ribbon + RestTemplate 时,利用 RestTemplate 对 http 请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign 在 Ribbon 基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在 Feign 的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用 Spring cloud Ribbon 时,自动封装服务调用客户端的开发量。与 Ribbon 不同的是,通过 Feign 只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用
Feign 已经停止维护,OpenFeign 是 Spring Cloud 在 Feign 的基础上进一步开发出来替代 Feign 的技术,支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
1.1.2 相关依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
1.2 简单使用
1.2.1 基础工程
☞ eureka 项目
1.2.2 Feign 客户端
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2025/11/5
* @description Feign 接口
*/
@Component
@FeignClient("ProviderServer") // 服务提者名称
public interface ProviderFeign {
@GetMapping("/provider/get") // 服务地址
public String get();
}
1.2.3 启动类
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
1.2.4 调用服务
我们可以发现 Feign 自带负载均衡配置,而 OpenFeign 默认支持 Ribbon,我们可以通过 Ribbon 的配置来修改负载均衡策略。Ribbon 详情参考 ☞Spring Cloud 系列之负载均衡 Ribbon
1.3 其他配置
1.3.1 超时控制
# 设置 feign 客户端超时时间, 默认 1s feign: client: config: default: connectTimeout: 5000 readTimeout: 5000 # OpenFeign 默认支持 Ribbon,也可以使用以下配置 ribbon: # 建立连接所用时间,适用于网络正常的情况下,两端连接所用的时间 ConnectTimeout: 5000 # 建立连接后从服务器读取到可用资源所用的时间 ReadTimeout: 5000
1.3.2 数据压缩
feign: compression: request: # 开启数据压缩请求 enabled: true # 压缩数据类型 mime-types: text/xml, application/xml, application/json # 数据压缩下限 2048表示传输数据大于2048 才会进行数据压缩(最小压缩值标准) min-request-size: 2048 # 开启数据压缩响应 response: enabled: true
1.3.3 日志配置
☞ 日志级别
♞ NONE:不开启日志(默认)
♞ BASIC:记录请求方法、URL、响应状态、执行时间
♞ HEADERS:在 BASIC 基础上增加请求/响应头
♞ FULL:在 HEADERS 基础上增加 body 和请求元数据
☞ 配置类
@Configuration
public class LogConfig {
@Bean
Logger.Level loggerLevel(){
return Logger.Level.FULL;
}
}
☞ 配置文件
logging: level: # 以什么级别监控那个接口 com.software.controller: debug
☞ 输出
☞ 源码
上一篇 : Java Mail邮件发送如何实现简单封装
下一篇 : nuxt.js 在middleware(中间件)中实现路由鉴权操作
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!