SpringCloud学习 系列八、OpenFeign
系列导航
SpringCloud学习 系列一、 前言-为什么要学习微服务
SpringCloud学习 系列三、 创建一个没有使用springCloud的服务提供者和消费者
SpringCloud学习 系列四、微服务中心 Eureka介绍及创建一个Eureka中心服务
SpringCloud学习 系列五、创建生产者和消费者验证微服务中心 Eureka的作用
SpringCloud学习 系列七、EurekaServer集群创建
SpringCloud学习 系列十、服务熔断与降级(1-简介)
SpringCloud学习 系列十、服务熔断与降级(2-方法级别服务降级)
SpringCloud学习 系列十、服务熔断与降级(3-类级别的服务降级)
SpringCloud学习 系列十、服务熔断与降级(4-Dashboard监控仪表盘)
1、官网介绍
声明式 REST 客户端:Feign 通过使用 JAX-RS(Java Api eXtensions for RESTful WebServices,简单来说,就是一种使用注解来实现 RESTful 的技术)或 SpringMVC 注解的装饰方式,生成接口的动态实现。
2、通俗理解
Feign含义:假装,伪装。
OpenFeign可以将提供者提供的Restful服务伪装为接口进行消费,消费者只需使用“feign接口 + 注解”的方式即可直接调用提供者提供的 Restful 服务,而无需再使用 RestTemplate。
注意:
Feign 接口是由消费者调用,与提供者没有任何关系。
Feign 仅是一个伪客户端,其不会对请求做任何处理。
Feign 是通过注解的方式实现 RESTful 请求的。
3、创建OpenFeign的工程
为了留存之前的代码,将02-provider-8081复制一份变为03-provider-8081,为了演示方便将注册到集群的功能改回注册到单机eureka
(1)复制 02-consumer-8080命名为 03-consumer-feign-8080。
(2)添加依赖
(3)修改启动类
(4)定义Feign接口
这里要注意:上面selectList方法本来用@GetMapping的,但是如果要传递json参数就必须要改成@PostMapping否则会报错:如下
BUG:feign.FeignException$MethodNotAllowed: status 405 reading
<1>因为要用post方法所以03-provider-8081的Controller也要该成相应的Post方法。
<2>这里还要特别强调一下@RequestBody的用法,provider中参数的接收,路径上的参数可以不用@RequestBody,但是非路径上的参数必须用@RequestBody才可以接收到参数,否则参数无法接收。
(5)删除如下类
(6)修改处理器
(7)修改启动类
(8)启动程序验证
1、启动00-eurekaserver-8000、03-provider-8081、03-consumer-feign-8080
2、consumer/block/get/1 测试单条查询
这是测试路径中的参数
3、consumer/block/list 测试
不带参数测试
带参数测试
4、consumer/block/add 测试新增
5、consumer/block/update/7 测试修改
6、consumer/block/delete/7 测试删除
全部验证完毕,feign的功能都好用了。
(9)超时策略
最后补充一下超时的策略,feign客户端需要调用provider的提供的服务,feign客户端等待多久没有收到响应可以认为是请求失败。
直接上实例
1、修改03-feignConsumer-8080的配置文件
2、修改服务实现类,增加一段休眠6秒的程序
![](https://img2023.cnblogs.com/blog/2379975/202212/2379975-20221215160326159-201833804.png)
3、重启03-provider-8081、03-consumer-feign-8080
4、访问consumer/block/get/1验证超时