什么是Feign
在以往的经验中,我们已经知道使用@RestTemplate可以实现远程调用,但RestTemplate有一定的缺陷如代码可读性差,url参数难以维护等 所以就有了Feign
Feign是一个声明式的可插拔的http客户端让我们更方便的进行http请求
如何定义和使用feign客户端
1 引入feign依赖
org.springframework.cloud
spring-cloud-starter-openfeign
2 在相应模块的启动类中加入@EnableFeignClients开启feign
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
【微服务|微服务小结4---http客户端Feign】3 定义和使用feign客户端
@FeignClient(value = "https://www.it610.com/article/userService")//远程调用的服务为userService
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
直接在相应的服务调用UserClient
Feign的日志配置
文章图片
自定义feign的日志配置
两种方式
1
//全局配置
feign:
client:
config:
default://default代表这是全局配置
loggerLevel: FULL//日志级别为full
//局部配置
feign:
client:
config:
userserivce://userservice代表日志只在这个服务内生效 为局部配置
loggerLevel: FULL//日志级别为full
2
1 声明一个日志配置类
public class defaultFeignConfiguration {
@Bean
public Logger.Level logLever(){
return Logger.Level.BASIC;
}
}
2 如果是全局配置
@EnableFeignClients(defaultConfiguration = defaultFeignConfiguration.class)
3 如果是局部配置
@FeignClient(configuration = defaultFeignConfiguration)//远程调用的服务为userService
Feign的性能优化
Feign的低层默认URLconnection不使用连接池,这也导致会消耗大量的资源去创建和销毁,性能优化主要是使用OKHttp和Apache HTTPClient 支持线程池的方式来优化以及日志级别尽量使用BASIC以及NULL
引入依赖
io.github.openfeign
feign-httpclient
feign:
httpclient:
enabled: true # 支持HttpClient的开关
max-connections: 200 # 最大连接数
max-connections-per-route: 50 # 单个路径的最大连接数
client:
config:
default:
loggerLevel: BASIC
在实际项目开发中,我们的FeignClient客户端可能要被多个消费者使用,所以我们考虑将FeignClient进行抽取成一个独立的模块,实现松耦合
注意事项:在调用这个独立的Feign模块时我们可能扫描不到这个模块的包
有以下两种方式进行包的读取
1 在EnableFeignClients中指定FeignClient的字节码
@EnableFeignClients(clients = UserClient.class,defaultConfiguration = defaultFeignConfiguration.class)
2 直接指定包路径
@EnableFeignClients(basePackeages= "包路径")
推荐阅读
- 面经|腾讯 5 轮面试,接到 40k*16 的 Offer !详解面试流程和真题
- 面试|2022届大厂面试 JUC常考总结版
- 网络|简单易用的嵌入式网络库(Mongoose)
- harmonyos|HarmonyOS应用开发--基于Canvas的MyMathDraw[我的数学板][底部弹窗][API V6]
- harmonyos|HarmonyOS应用开发【项目实践】——专栏介绍(作者(TDTX))
- JVM|JAVA中常量池、运行时常量池、字符串常量池区别
- 数据结构|给定值将链表分割成两部分
- JAVA|Java中常量池、运行时常量池和字符串常量池的区别
- Java|Java整合腾讯云短信发送