声明式HTTP客户-Feign

一、SpringCloud整合Feign

1.添加依赖:在这里插入图片描述
2.启动类上添加注解:在这里插入图片描述

二、Feign的使用

1.首先新建一个接口,添加上@FeignClient注解,name为服务提供者的微服务名称,接着在接口中加上需要调用的接口地址和参数即可:
在这里插入图片描述
2.使用时将上图接口注入,直接调用需要使用的接口即可:在这里插入图片描述
因为Feign是基于Ribbon上开发的,所以Feign调用微服务时也默认使用了基于随机算法的负载均衡;

三、Feign的组成

在这里插入图片描述
feign.Client.Default底层使用urlConnection请求,因为urlConnection没有连接池和资源管理,所以性能不是特别好,LoadBalancerFeignClient可以使用连接池,所以性能相对较好,如何使用在下面的Feign性能优化中会讲解到;

四、细粒度配置自定义-01-Java代码方式-指定日志级别

1.Feign日志级别:
在这里插入图片描述
生成环境中优先使用BASIC级别;

开发环境中优先使用FULL级别;

2.开始配置

首先自定义一个Feign配置类,里面返回需要打印的日志级别,该类不能加@configuration注解,否则就要放到@componentScan能扫描到的包以外,也就是启动类的所在的包以外,不然会有父子上下文问题,严重可能影响项目的启动;下图为Feign配置类:
在这里插入图片描述
然后在FeignClient接口中新增configuration参数,值为上面自定义的配置类:
在这里插入图片描述
最后在配置文件中新增该接口的日志级别,一定要是debug,因为Feign日志是建立在debug级别上的,如果使用info,将无法打印日志;下图为配置文件:
在这里插入图片描述
到这里Feign使用JAVA代码方式开启日志打印就结束了

五、细粒度配置自定义-02-配置属性方式-指定日志级别

只需要如下图配置即可,比代码方式更加的方面简洁:
在这里插入图片描述

六、全局配置-01-Java代码方式-指定日志级别

有两种方式配置:

方式一:让父子上下文ComponentScan重叠(强烈不建议,原因可查看上文四.2)

方式二:@EnableFeignClients(defaultConfiguration = xxx.class)(唯一正确的途径)
在这里插入图片描述

七、全局配置-02-配置属性方式-指定日志级别

只需要将微服务名称改为default即可,非常方便:
在这里插入图片描述

八、Feign支持的配置项

1.使用代码方式支持的配置项:
在这里插入图片描述
2.使用属性的方式支持的配置项:
在这里插入图片描述
以上两种配置方法都和上文讲解的四、五、六、七方式一致,这些配置项不用特意去记,只要使用的时候知道去哪里寻找即可;

九、配置最佳实践总结

1.Ribbon配置 VS Feign配置:
在这里插入图片描述
2.Feign代码方式 VS 属性方式:
在这里插入图片描述
优先级比较:全局代码<全局属性<细粒度代码<细粒度属性

建议:

尽量使用属性配置,属性方式实现不了的情况下才考虑使用代码方式;

在同一个微服务内尽量保持单一,比如统一使用属性配置,不要两种方式混用,增加定位代码的复杂性;

十、Feign的继承

我们可以发现MemberFeignClient接口的内容在member微服务中的MemberController肯定是一样的,那么如果将所有的接口都先写在一个共同接口中(下文称CommonInterface),让MemberFeignClient继承
CommonInterface接口,MemberController实现CommonInterface接口,那么如果接口信息有变化只需要修改CommonInterface接口即可,这样一来就可极大减少工作量,也避免了更新不及时的问题,不过这样也同样造成了微服务之间的紧耦合,这就和微服务的初衷背道而驰了,以下是各方观点:

官方观点:不建议使用(因为会造成微服务间的紧耦合)

业界观点:很多公司使用(因为非常方便,降低工作量)

个人观点:权衡利弊

十一、多参数请求构造

请直接参考该篇手记:

http://www.imooc.com/article/289000

十二、Feign脱离Ribbon使用

一般情况下Feign都是用于调用在Nacos上注册的微服务接口,除此之外,Feign还有另外一种用法,就是直接访问某个链接;

首先创建一个接口,@FeignClient中url为即将要访问的链接地址:
在这里插入图片描述
之后在项目中直接调用baidu方法即可,结果就是直接访问到百度首页;下图为调用方式:
在这里插入图片描述

十三、RestTemplate vs Feign

在这里插入图片描述
总结:尽量使用Feign,杜绝RestTemplate,因为一个项目不允许出现两种请求方式,统一编码风格,共存带来的只有风格的不统一,但是事无绝对,权衡利弊;

十四、Feign性能优化

1.为Feign添加连接池,可以选择使用httpclient或者是okclient;

首先加依赖:
在这里插入图片描述
接着添加属性配置:
在这里插入图片描述
添加了连接池后,Feign的性能大概能提升15%左右,httpclient和okclient不能两个都使用,只能选择一个使用;

2.日志级别

Feign默认是不显示日志的,这样性能当然最快,但是在生产环境中我们不可能不打印日志,所以建议使用BASIC级别,具体可查看师四——七小节;

十五、常见问题总结

参考该手记:http://www.imooc.com/article/289005

PS:本博客所有手记均转载自慕课网大目老师;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值