Spring Cloud(六) OpenFegin
Spring Cloud OpenFegin
RestTemplate可以实现REST API的远程调用,它的请求URL使用字符串拼接的方式,在应对URL中存在多个参数的情况时,这种方式会变得非常低效并且难以维护。
Spring Cloud OpenFegin简介
Spring Cloud OpenFegin是声明式的服务调用工具,它整合了Ribbon和Hystrix,拥有负载均衡和服务容错功能。
Fegin是声明式的服务调用工具,我们只需要创建一个接口并用注解的方式来配置它,就可以实现对某个服务接口的调用,简化了直接使用RestTemplate来调用服务接口的开发量。Fegin具备可插拔的注解支持,同时支持Fegin注解、JAX-RS注解及SpringMVC注解。
Fegin和OpenFegin的区别
Fegin
Fegin是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,Fegin内置Ribbon用来做客户端负载均衡,去调用服务注册中心的服务。
Fegin的使用方式:使用Fegin的注解定义接口,调用这个接口就可以调用服务注册中心的服务。
依赖:
1 | <dependency> |
OpenFegin
OpenFegin是Spring Cloud在Fegin的基础上支持了SpringMVC的注解,如@RequestMapping等。OpenFegin的@FeginClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类。实现类中做负载均衡并调用其他服务。
依赖:
1 | <dependency> |
整合OpenFeign实现负载均衡
添加依赖
1 | <dependency> |
启动类添加@EnableFeignClients注解
添加UserService接口完成对user-service服务的接口绑定
1 | /*实现Feign客户端,value接口调用的服务名称*/ |
同理,添加BookService接口完成对于book-service服务的接口绑定
BorrowServiceImp调用UserService实现服务调用
1 |
|
在user-service中的UserController打印日志
验证负载均衡
整合OpenFeign实现服务降级
OpenFegin客户端定义的接口添加一个服务降级处理的实现类即可实现OpenFegin的服务降级
添加服务降级实现类UserFallBackService
1 |
|
设置UserService接口服务降级处理类
1 |
|
配置文件开启Fegin的Hystrix功能
整合OpenFegin实现日志打印
Fegin提供了日志打印功能,通过配置来调整日志级别,从而理解Fegin中HTTP请求的细节
日志级别
- NONE:默认的,不显示任何日志
- BASIC:仅记录请求方法、URL、响应状态码及执行时间
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
- FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据
通过配置类开启日志功能
1 |
|
配置文件开启日志的Fegin客户端
设置UserService和BookService的日志级别为debug
1 | logging: |
查看日志
调用http://localhost:8301/borrow?uid=1&bid=1进行测试,控制台日志如下