SpringCloud Feign 远程调用(史上最详细讲解)
前言
Feign 是声明式的 web service 客户端,它让微服务的调用变得更简单了,帮助我们优雅的实现 http 请求的发送。SpringCloud 集成了 Ribbon 和 Eureka,可在使用 Feign 时提供负载均衡的 http 客户端。
1、Feign 介绍
利用 RestTemplate 发起远程调用代码如下:
此时代码可读性差,参数复杂 URL 难以维护。
而 Feign 是一个声明式的 http 客户端,其作用就是帮助我们优雅的实现 http 请求的发送。
官方地址:https://github.com/OpenFeign/feign
2、Feign 的使用
Feign 替代 RestTemplate 的步骤如下:
1、引入依赖
在调用其他微服务的微服务 order-service 的 pom.xml 中添加。
2、添加注解
在调用其他微服务的微服务 order-service 的启动类添加注解开启 Feign 的功能。
3、编写 Feign 的客户端
新建一个接口,代码如下。
这个客户端主要是基于 SpringMVC 的注解来声明远程调用的信息,Feign 就可以帮助我们发送 http 请求,无需自己使用 RestTemplate 来发送了。
4、测试
修改 order-service 中的 queryOrderById 方法,使用 Feign 客户端代替 RestTemplate。
3、Feign 的自定义配置
Feign 可以支持很多的自定义配置,一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的 @Bean 覆盖默认 Bean 即可,如下表所示:
自定义配置 有 配置文件方式 和 Java 代码方式 两种方式,在此不展开讲述了。
4、Feign 的优化使用
1、引入依赖
在 order-service 的 pom 文件中引入 Apache 的 HttpClient 依赖:
2、配置连接池
在 order-service 的 application.yml 中添加配置:
Feign 的优化:日志级别尽量用 basic;使用 HttpClient 或 OKHttp 代替 URLConnection。
5、Feign 的最佳实践
1、继承方式
1)定义一个 API 接口,利用定义方法,并基于 SpringMVC 注解做声明。
2)Feign 客户端和 Controller 都集成改接口
优点:
简单
实现了代码共享
缺点:
服务提供方、服务消费方紧耦合
参数列表中的注解映射并不会继承,因此 Controller 中必须再次声明方法、参数列表、注解
2、抽取方式
将 Feign 的 Client 抽取为独立模块,并且把接口有关的 POJO、默认的 Feign 配置都放到这个模块中,提供给所有消费者使用。
总结
其实 Feign 就是一个声明式的 http 客户端,帮助我们实现优雅的 http 请求的发送。以上就是 Feign 实现远程调用的全部内容,仅供参考,最后送上一句,每日毒鸡汤:“半夜給你留燈的,只有自動售貨機。”
版权声明: 本文为 InfoQ 作者【斯】的原创文章。
原文链接:【http://xie.infoq.cn/article/9c37c50db96fbd98cb6cff9fa】。文章转载请联系作者。
评论