spring_cloud组件之Feign
一、简介
Feign也叫做伪装,可以把rest的请求隐藏,不需要进行拼接url、参数等。组件主页:https://github.com/OpenFeign/feign
二、应用
1、pom.xml
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-openfeign</artifactId> 4 </dependency>
2、启动类添加注解 @EnableFeignClients 开启 feign 功能,编辑feign客户端代码,客户端可以使用spring mvc 注解,demo代码如下:
1 package com.liuxn.cloud.common.client; 2 3 import com.liuxn.cloud.framework.model.DemoVo; 4 import org.springframework.cloud.openfeign.FeignClient; 5 import org.springframework.web.bind.annotation.GetMapping; 6 import org.springframework.web.bind.annotation.PathVariable; 7 8 /** 9 * @author liuxn 10 * @date 2020/12/25 11 */ 12 //声明当前客户端是provider服务、作用是拼接请求uurl 使用feign代替RestTemplate 13 @FeignClient("springcloud-eureka-provider") 14 public interface DemoClient { 15 16 /** 拼接后url http://springcloud-eureka-provider/provider/2 17 * 可以使用spring mvc 注解 18 * @param id 19 * @return 20 */ 21 22 @GetMapping("/provider/{id}") 23 DemoVo getUserById(@PathVariable int id); 24 }
三、feign 负载均衡及熔断
feign可开启的配置 负载均衡、服务熔断、请求压缩、日志级别等,
- Rribbon
feign中默认设置请求超时时间 默认1秒,单位:ms。可通过一下配置进行修改
1 ribbon: 2 # 连接超时时长 3 ConnectTimeout: 1000 4 #数据通信超时时长 5 ReadTimeout: 2000 6 #当前服务器的重试次数 7 MaxAutoRetries: 0 8 #重试多少次服务 9 MaxAutoRetriesNextServer: 0 10 #是否对所有的请求方式都重试 11 okToRetryonA17operations: false
- Hystrix
1、开启Hystrix 配置
1 feign: 2 hystrix: 3 enabled: true #开启feign中 Hystrix熔断
2、编写服务降级类
1 /** 2 * 默认降级类 实现指定的client 3 * @author liuxn 4 * @date 2020/12/29 5 */ 6 @Component 7 public class DemoClientFallBack implements DemoClient { 8 @Override 9 public DemoVo getUserById(int id) { 10 11 DemoVo demoVo = new DemoVo(); 12 demoVo.setMessage("失败、请求被降级了 "+id); 13 return demoVo; 14 } 15 }
1 @FeignClient(value = "springcloud-eureka-provider",fallback = DemoClientFallBack.class) 2 public interface DemoClient { 3 4 /** 拼接后url http://springcloud-eureka-provider/provider/2 5 * 可以使用spring mvc 注解 6 * @param id id 7 * 8 * @return DemoVo 9 */ 10 @GetMapping("/provider/{id}") 11 DemoVo getUserById(@PathVariable int id); 12 }
当前服务内出错时返回 {"message":"失败、请求被降级了 123"}
- 请求压缩 :支持对请求进行gzip压缩 减少通信过程中的性能损耗
1 feign: 2 compression: 3 request: 4 enabled: true #开启请求压缩 5 mime-types: text/xml, application/xml, application/json #支持压缩数据类型 6 min-request-size: 2048 #触发压缩大小 7 response: 8 enabled: true
日志级别
logging.level.xx=debug 词配置不会对feign生效。需要重新创建一个新的feign.logger示例。feign 支持 logger 级别有:
- NONE: 不记录任何日志信息,默认值
- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
- HEADERS:在BASIC的基础上记录请求响应的头信息
- FULL:记录所有请求和响应的明细。包括头信息,请求体,元数据。
feign日志级别配置类:
1 @Configuration 2 public class FeignConfig { 3 4 5 /** 6 * NONE: 不记录任何日志信息,默认值 7 * BASIC:仅记录请求的方法,URL以及响应状态码和执行时间 8 * HEADERS:在BASIC的基础上记录请求响应的头信息 9 * FULL:记录所有请求和响应的明细。包括头信息,请求体,元数据 10 */ 11 @Bean 12 Logger.Level feignLoggerLevel() { 13 return Logger.Level.FULL; 14 } 15 16 }
开启feign日志 configuration = FeignConfig.class
/** * @author liuxn * @date 2020/12/25 声明当前客户端是provider服务、作用是拼接请求uurl */ @FeignClient(value = "springcloud-eureka-provider", fallback = DemoClientFallBack.class, configuration = FeignConfig.class) public interface DemoClient { /** * 拼接后url http://springcloud-eureka-provider/provider/2 可以使用spring mvc 注解 * * @param id id * * @return DemoVo */ @GetMapping("/provider/{id}") DemoVo getUserById(@PathVariable int id); }