spring cloud 基础实战(五) Feign
Feign是Netflix公司开源的轻量级Rest客户端http://github.com/OpenFeign/feign,使用Feign可以非常方便,简单的实现Http客户端,使用Feign只需要定义一个接口,然后在接口上添加注解即可。
Spring Cloud 对 Feign进行了封装,Feign默认集成了Ribbon实现了客户端负载均衡调用。
目前更习惯用面向接口编程,比如Service接口,Dao接口,这是默认遵循的规范。
微服务间的调用就是两种方式:
- 通过微服务名称,获得服务的调用地址
- 通过接口+注解,获得服务的调用–Feign(为适应业界及其它程序员提出的,还是遵循面向接口编程)类似于以前Mapper接口上使用@Mapper注解进行表识,而使用Feign就只要在接口上标注@FeignClient注解。
案例:
1.在原有的案例基础上加Feign模块
新建 studentservice-cloud-07-consumer-product-feign,参考studentservice-cloud-04-consumer-product-80
1.添加依赖 pom.xml
2.创建主启动类 StudentConsumer_80_feign ,并且添加注解@EnableFeignClients
3.新建 ProductClientService 接口,使用 @FeignClient(“服务名称”) 注解标识,来指定调用哪个服务比如:在代码中调用了 microservice-product 服务的 /student/list 、/student/get/{sid}、/student/add 接 口,代码如下:
4.测试
-
启动2个eureka集群
-
启动2个商品提供者8001/8002
-
启动 ProductConsumer_80_Feign
-
连续几次请求会得不同的数据
发现一样有负载均衡配置功能
5.Feign工作原理:
Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),请求发送给 Eureka 服务器(http://microservice-product/student/list), 通过Feign直接找到服务接口 ,因为集成了 Ribbon 技术,Feign 自带负载均 衡配置功能。
- 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接口,并生成此接口的代理 对象
- @FeignClient("服务名称 ") 即指定了 product 服务名称,Feign会从Eureka注册中心获取 product 服务列表, 并通过负载均衡算法进行服务调用。
- 在接口方法中使用注解 @RequestMapping(value = “/student/list”,method = RequestMethod.GET),指定调 用的url,Feign 会根据url进行远程调用。
6.Feign注意事项
SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意: - @FeignClient接口方法有基本类型参数在参数必须加@PathVariable(“XXX”) 或 @RequestParam(“XXX”)
- @FeignClient接口方法返回值为复杂对象时,此类型必须有无参构造方法。