什么是
Feign
Feign
是
Netflix
公司开源的轻量级
Rest
客户端
(
https://github.com/OpenFeign/feign
)
,使用
Feign
可以非常方 便、简单的实现 Http
客户端,
使用
Feign
只需要定义一个接口,然后在接口上添加注解即可
。
Spring Cloud
对
Feign
进行了封装,
Feign
默认集成了
Ribbon
实现了客户端负载均衡调用
。
目前大家更习惯用面向接口编程,比如
Service
接口,
Dao
接口等,这是大家默认遵守的规范
微服务间的调用就有两种方式:
1.
通过微服务名称,获得服务的调用地址
2.
通过接口
+
注解,获得服务的调用
——Feign
(为适应业界其它程序员提出的,还是遵循面向接口编程)
类似于以前
Mapper
接口上使用
@Mapper
注解进行标识,而使用
Feign
就只要在接口上标注
@FeignClient
注解。
Feign
实战操作
创建
Feign
模块
新建
microservice-cloud-07-consumer-product-feign
,参考
microservice-cloud-04-consumer-product- 80
![](https://i-blog.csdnimg.cn/direct/b14e61c122e44d6ba50a3e801d35b8ca.png)
拷贝
microservice-cloud-04-consumer-product-80
中的
pom
依赖配置
粘贴到
microservice-cloud-07-consumer-product-feign
![](https://i-blog.csdnimg.cn/direct/a8c7e0bf41784f7c9890402af4a55ce4.png)
拷贝
application.yml
与
java
类路径
下的所有文件到
microservice-cloud-07-consumer-product-feign
![](https://i-blog.csdnimg.cn/direct/2c82b06740c842cf8843d3792d1f9336.png)
拷贝与修改主启动类名:
ProductConsumer_80_Feign
![](https://i-blog.csdnimg.cn/direct/fc242e6186654c18bef7e3bb42464716.png)
![](https://i-blog.csdnimg.cn/direct/5d0c5c7a971e4525834fff8e3b8fa6d5.png)
![](https://i-blog.csdnimg.cn/direct/6b903bcb987343e2b94ecc83c4d117a9.png)
配置
pom.xml
文件
microservice-cloud-07-consumer-product-feign
的
pom.xml
修改,添加
feign
启动器
![](https://i-blog.csdnimg.cn/direct/261675d070c14d2cbe65a7d72053d77e.png)
新建
ProductClientService
接口
新建
ProductClientService
接口,使用
@FeignClient("
服务名称
")
注解标识,来指定调用哪个服务
比如:在代码中调用了
MICROSERVICE-PRODUCT
服务的
/product/list
、
/product/get/{id}
、
/product/add
接口,代码如下:
![](https://i-blog.csdnimg.cn/direct/d6c7ffb98c9747ffa39cdd6a039615fc.png)
![](https://i-blog.csdnimg.cn/direct/fce11faf9578495ba96ccc1806e1982d.png)
创建
ProductController_Feign
将
ProductController_Consumer
重合名为
ProductController_Feign
向
ProductController_Feign
注入
ProductClientService
对象
![](https://i-blog.csdnimg.cn/direct/33a8be7fc0e641e0a214c13bcefb6737.png)
![](https://i-blog.csdnimg.cn/direct/5a2ba8e816c54e22ac2e925f9f631e34.png)
修改主启动类
添加注解 :
@EnableFeignClients(basePackages= {"com.mengxuegu.springcloud"})
![](https://i-blog.csdnimg.cn/direct/1d266f51511749cfb29af9abba606284.png)
![](https://i-blog.csdnimg.cn/direct/9eba8bd85e4f4f2da59436567b688455.png)
功能测试
启动
2
个
eureka
集群
启动
2
个商品提供者
8001/8002
启动
ProductConsumer_80_Feign
访问:
http://localhost/consumer/product/list
发现一样有负载均衡配置功能
Feign
工作原理
Feign
通过接口的方法调用
Rest
服务(之前是
Ribbon+RestTemplate
),
请求发送给
Eureka
服务器(
http://MICROSERVICE-PRODUCT/product/list
)
,
通过
Feign
直接找到服务接口 ,因为集成了
Ribbon
技术,
Feign
自带负载均衡配置功能。
1
、 启动类添加
@EnableFeignClients
注解,
Spring
会扫描标记了
@FeignClient
注解的接口,并生成此接口的代理对象
2
、
@FeignClient("
服务名称
")
即指定了
product
服务名称,
Feign
会从
Eureka
注册中心获取
product
服务列表,并通过负载均衡算法进行服务调用。
3
、在接口方法中使用注解
@RequestMapping(value = "/product/list",method = RequestMethod.GET)
,指定调用的url
,
Feign
会根据
url
进行远程调用。
6.4 Feign
注意事项
SpringCloud
对
Feign
进行了增强兼容了
SpringMVC
的注解 ,我们在使用
SpringMVC
的注解时需要注意:
1
、
@FeignClient
接口方法有基本类型参数在参数必须加
@PathVariable("XXX")
或
@RequestParam("XXX")
2
、
@FeignClient
接口方法返回值为复杂对象时,此类型必须有无参构造方法。