spring cloud 基础实战(五) Feign

Feign是Netflix公司开源的轻量级Rest客户端http://github.com/OpenFeign/feign,使用Feign可以非常方便,简单的实现Http客户端,使用Feign只需要定义一个接口,然后在接口上添加注解即可。
Spring Cloud 对 Feign进行了封装,Feign默认集成了Ribbon实现了客户端负载均衡调用。
目前更习惯用面向接口编程,比如Service接口,Dao接口,这是默认遵循的规范。
微服务间的调用就是两种方式:

  1. 通过微服务名称,获得服务的调用地址
  2. 通过接口+注解,获得服务的调用–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

  • 访问:
    http://localhost/consumer/student/list
    在这里插入图片描述

  • 连续几次请求会得不同的数据
    在这里插入图片描述
    发现一样有负载均衡配置功能

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接口方法返回值为复杂对象时,此类型必须有无参构造方法。
发布了22 篇原创文章 · 获赞 1 · 访问量 811

猜你喜欢

转载自blog.csdn.net/CHENGXUYUAN09/article/details/104813842