当前位置:网站首页>【云原生】微服务之Feign自定义配置的记录
【云原生】微服务之Feign自定义配置的记录
2022-07-05 05:36:00 【小威要向诸佬学习呀】
前言:
最近在学习微服务相关的知识,看了黑马的相关课程,将关于Feign的知识又总结了一些,希望能帮到各位小伙儿们以及加深下自己的印象
如果文章有什么需要改进的地方还请大佬多多指教
小威先感谢大家的支持了
🥤Feign的自定义配置
Feign自定义配置的方式有两种:java代码配置 和 属性配置,以下将介绍这两种配置。
这里我们先以Feign日志配置为例,Feign默认不打印任何日志,在远程调用发生异常时,后续调试会想要查看整个请求的细节,这时候可以配置Feign日志来记录请求。
Feign的日志级别
1.NONE(默认值):不记录任何日志
2.BASIC:仅记录请求方法、URL、响应状态码以及执行时间
3.HEADERS:记录BASIC级别的基础上,记录请求和响应的header
4.FULL:记录请求和响应的header、body和元数据
当然除了日志以外也有其他的,以下以表格的形式呈现:
类型 | 作用 | 说明 |
---|---|---|
feign.Logger.Level | 修改日志级别 | 包含四种不同的级别:NONE、BASIC、HEADERS、FULL |
feign.codec.Decoder | 响应结果的解析器 | http远程调用的结果做解析,例如解析json字符串为java对象 |
feign.codec.Encoder | 请求参数编码 | 将请求参数编码,便于通过http请求发送 |
feign. Contract | 支持的注解格式 | 默认是SpringMVC的注解 |
feign. Retryer | 失败重试机制 | 请求失败的重试机制,默认是没有,不过会使用Ribbon的重试 |
一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可。
配置文件
基于配置文件修改feign的日志级别可以针对单个服务:
feign:
client:
config:
userservice: # 针对某个微服务的配置
loggerLevel: FULL # 日志级别
也可以针对所有服务:
feign:
client:
config:
default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
loggerLevel: FULL # 日志级别
而日志的级别分为四种:
- NONE:不记录任何日志信息,这是默认值。
- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
🧁Java代码配置方式
也可以基于Java代码来修改日志级别,先声明一个类,然后声明一个Logger.Level的对象:
public class DefaultFeignConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC; // 日志级别为BASIC
}
}
如果要全局生效,将其放到启动类的@EnableFeignClients这个注解中:
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class)
如果是局部生效,则把它放到对应的@FeignClient这个注解中:
@FeignClient(value = "userservice", configuration = DefaultFeignConfiguration .class)
Feign的调优
Feign性能调优本⾝的性能就很⾼,但还是可以优化。
feign底层的客户端实现:
URLConnection:默认实现,不支持连接池
Apche HttpClient:支持连接池
OKHttp:支持连接池
因此优化feign的性能的点有
使用连接池代替默认的URLConnection
日志级别:同时⽇志的级别不同,消耗的性能也不同,尽量使用Basic级别或none
可以使⽤Apche HttpClient 或 OKHttp进⾏优化
Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:
•URLConnection:默认实现,不支持连接池
•Apache HttpClient :支持连接池
•OKHttp:支持连接池
因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。
这里我们用Apache的HttpClient来演示。
第一步 引入依赖
在order-service的pom文件中引入Apache的HttpClient依赖:
<!--httpClient的依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
2)配置连接池
在order-service的application.yml中添加配置:
feign:
client:
config:
default: # default全局的配置
loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 50 # 每个路径的最大连接数
在FeignClientFactoryBean中的loadBalance方法中打断点,并Debug方式启动order-service服务,底层就是Apache HttpClient。
1.日志级别尽量用basic
2.使用HttpClient或OKHttp代替URLConnection
① 引入feign-httpClient依赖
② 配置文件开启httpClient功能,设置连接池参数
文章到这里就结束了,如果有什么疑问的地方请指出
再次感谢各位小伙伴儿们的支持
边栏推荐
猜你喜欢
lxml. etree. XMLSyntaxError: Opening and ending tag mismatch: meta line 6 and head, line 8, column 8
Time of process
【Jailhouse 文章】Jailhouse Hypervisor
Reader writer model
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 58 - II. 左旋转字符串
Palindrome (csp-s-2021-palin) solution
Gbase database helps the development of digital finance in the Bay Area
Introduction to tools in TF-A
Analysis of backdoor vulnerability in remote code execution penetration test / / phpstudy of national game title of national secondary vocational network security B module
随机推荐
Using HashMap to realize simple cache
【实战技能】如何做好技术培训?
[jailhouse article] look mum, no VM exits
2017 USP Try-outs C. Coprimes
Gbase database helps the development of digital finance in the Bay Area
Support multi-mode polymorphic gbase 8C database continuous innovation and heavy upgrade
CF1634 F. Fibonacci Additions
Web APIs DOM node
卷积神经网络简介
Introduction to convolutional neural network
Sword finger offer 09 Implementing queues with two stacks
Little known skills of Task Manager
Palindrome (csp-s-2021-palin) solution
二十六、文件系统API(设备在应用间的共享;目录和文件API)
sync.Mutex源码解读
[jailhouse article] performance measurements for hypervisors on embedded ARM processors
[to be continued] [UE4 notes] L2 interface introduction
Time of process
Annotation and reflection
Haut OJ 1221: a tired day