sprincloud-Feign配置二
一 前言
前文Feign配置一中讲述了feign的工作流程,日志设置,基本的HTTP远程过程调用,以及相关的注解说明;这篇文章主要说明的是feign的相关支持配置,以及替换原生的FeignClient;
二 OkHttp
目前主流的是使用OkHttp替换原生的FeignClient,Apache的HttpClient感觉没有OkHttp好,所以就不提了。
OkHttp 详细的信息可以参照文档 https://square.github.io/okhttp/; 主要特色如下:
- HTTP2支持多请求一台主机共享socket;
- 连接池减少请求延迟
- GZIP压缩,减少传输体积
- 支持响应缓存,减少重复响应;
2.1 引入依赖
父工程中已经引入springboot start依赖,这边不会重复引入;在原来工程的基础上新增 feign-okhttp
依赖;
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
</dependencies>
2.2 application.yml
跟配置一文章中不同之处是不用默认的feign配置,替换为开启okhttp配置;
server:
port: 8093
spring:
application:
name: feign-client # 应用名称
eureka:
client:
service-url:
# 服务注册地址
defaultZone: http://peer1:10081/eureka/,http://peer2:10082/eureka/,http://peer3:10083/eureka/
logging:
level:
com.zszxz.feign.service: Debug
# 开启okhttp
feign:
okhttp:
enabled: true
2.3 FeignOkHttpConfig
配置中都是基本配置,设置读取时间,超时时间,连接池,额外配置(例如拦截器)读者可以参照上面文档研究;
/**
* @Author lsc
* <p> okhttp基本配置 </p>
*/
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class)
public class FeignOkHttpConfig {
@Bean
public okhttp3.OkHttpClient okHttpClient(){
return new okhttp3.OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool())
.build();
}
}
2.5 service
这边调用的之前eureka-client提供的一个表现层API,跟平常的API没有什么区别;如果不懂可可以看看之前的文章或者拉取下源码
/**
* @Author lsc
* <p> </p>
*/
@FeignClient( name = "eureka-client", value = "eureka-client")
public interface FeignService {
@GetMapping("zszxz/feign")
public String getFeign();
}
2.6 controller
controller层不变,直接调用service层API
/**
* @Author lsc
* <p> feign 表现层 </p>
*/
@RestController
public class FeignController {
@Autowired
FeignService feignService;
@GetMapping("zszxz/feign")
public String getFeign(){
// 调用 getFeign方法
return feignService.getFeign();
}
}
2.7 访问结果
三 Feign集成配置说明
3.1 默认集成ribbon
feign默认集成了ribbon,不想像上面的配置文件中全局配置超时时间,而是单独配置ribbon可以参照如下:
#ribbon的超时时间
ribbon:
# 读超时时间
ReadTimeout: 60000
# 连接的超时时间
ConnectTimeout: 30000
3.2 开启 hystrix
默认情况下feign是没有开启hystrix,需要手动开启;
feign:
# 开启okhttp
okhttp:
enabled: true
# 开启 hystrix
hystrix:
enabled: true
# 熔断机制
hystrix:
shareSecurityContext: true
command:
default:
execution:
isolation:
thread:
timeoutInMillisecond: 10000
circuitBreaker:
sleepWindowInMilliseconds: 50000
forceClosed: true
四 其他配置说明
经过这两篇文章学习,基本的feign操作已经很全面,如官网上说的feign的继承,知识追寻者觉得是没必要学习,耦合度太高了;GZIP压缩,okhttp是支持的,跟平常调用没什么区别,如果要手动配置也就是返回值是byte而已,所以读者了解以下即可;还有一个回调处理,官网上的示例也很明了,读者很容易上手,如果时间充裕有可能会在hystrix讲解;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix