3、SpringCloud Netflix OpenFeign的使用以及讲解【SpringCloud组件学习笔记系列】(1)Eureka组件
【SpringCloud组件学习笔记系列】(2)Hystrix组件
【SpringCloud组件学习笔记系列】(3)OpenFeign组件
【SpringCloud组件学习笔记系列】(4)Gateway组件
【SpringCloud组件学习笔记系列】(5)Config组件
Feign可以把Rest请求进行隐藏,伪装成类似SpringMVC的Controller一样,不用再自己拼接URL,拼接参数等等操作,Feign可以接管这些并自动完成。
3.1、Feign的使用 3.1.1、依赖引入在consumer的pom文件中引入:
创建客户端接口类,添加添加@FeignClient注解,指定需要访问的服务名
@FeignClient("User-Service") // user-service为服务提供者的微服务名称public interface UserFeignClient { @GetMapping("/user/queryById/{id}") // feign对该请求地址做处理成http://user-service/user/queryById/id,十分优雅 public CommonVo
@RestController@RequestMapping("/UserFeign")public class UserByFeignController { @Autowired private UserFeignClient client; // 注入Feign的客户端,以供使用 @GetMapping("/user/queryById/{id}") public CommonVo
添加开启Feign功能的注解**@EnabledFeignClients**
@SpringBootApplication//(exclude= {DataSourceAutoConfiguration.class}) //exclude 避免因导入的其它模块中有类需要链接数据库而报错@EnableDiscoveryClient //开启Eureka客户端发现@EnableCircuitBreaker // 开启熔断@EnableFeignClients //开启Feign功能public class SpringCloud_Consumer_80_Application { public static void main(String[] args) { SpringApplication.run(SpringCloud_Consumer_80_Application.class,args); }}
3.1.5、启动服务并测试 3.2、负载均衡Feign自身整合了Ribbon的依赖和自动配置,因此可以直接支持负载均衡
Feign内置的Ribbon默认设置了请求超时时长,默认值为1000ms,可以通过设置参数值来修改这个数值。
3.2.1、配置全局ribbon: ReadTimeout: 2000 # 读取超时时长ConnectTimeout: 1000 # 建立链接的超时时长
3.2.2、配置单个服务名称User-Service: ribbon: ReadTimeout: 2000 # 读取超时时长 ConnectTimeout: 1000 # 建立链接的超时时长
User-Service为服务提供者的服务名称。
Ribbon内部有重试机制,一旦超时,会自动重新发起一次请求。
这些也可以通过配置文件配置指定值。
3.2.3、其它常用配置项ribbon: ConnectTimeout: 1000 # 连接超时时长 ReadTimeout: 2000 # 数据通信超时时长 MaxAutoRetries: 0 # 当前服务器的重试次数 MaxAutoRetriesNextServer: 0 # 重试多少次服务 OkToRetryOnAllOperations: false # 是否对所有的请求方式都重试
3.3、Hystrix支持 3.3.1、开启HystrixFeign集成了Hystrix,不过默认是关闭的,需要在配置文件中开启。
feign: hystrix: enabled: true # 开启Feign的熔断功能
3.3.2、使用Hystrix编写Feign客户端的实现类
@Componentpublic class UserFallBack implements UserFeignClient{ @Override public CommonVo
修改客户端中,@FeignClient注解的fallback属性的值为该接口的自定义实现类
@FeignClient(value = "User-Service",fallback = UserFallBack.class) // user-service为服务提供者的微服务名称public interface UserFeignClient { @GetMapping("/user/queryById/{id}") // feign对该请求地址做处理成http://user-service/user/queryById/id,十分优雅 public CommonVo
开启消费者、提供者以及Eureka服务
正常访问:
停止服务提供者之后,访问:
此时触发了服务降级,调用了fallback指定的,Feign客户端配置类的子类方法。
3.4、请求压缩(了解)Spring Cloud Feign 支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的参数即可开启请求与响应的压缩功能:
feign: compression: request: enabled: true # 开启请求压缩 response: enabled: true # 开启响应压缩
同时,我们也可以对请求的数据类型,以及触发压缩的大小下限进行设置:
feign: compression: request: enabled: true # 开启请求压缩 mime-types: text/html,application/xml,application/json # 设置压缩的数据类型 min-request-size: 2048 # 设置触发压缩的大小下限
注意:以上皆为默认值。
3.5、日志级别(了解)设置了日志级别,就可以在控制台看到压缩的具体信息。
@FeignClient注解修改的客户端在被代理时,会创建一个新的Feign.Logger示例。需要指定这个实例的日志级别。完成日志打印。
3.5.1、设置日志级别logging: level: com.aliang: debug # com.aliang为包名
3.5.2、编写Feign配置类@Configurationpublic class FeignConfiguration { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; }}
3.5.3、指定配置类这里指定的Level级别是FULL,Feign支持4种级别:
NONE:不记录任何日志信息,这是默认值。BASIC:仅记录请求的方法,URL以及响应状态码和执行时间HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
// user-service为服务提供者的微服务名称@FeignClient(value = "User-Service",fallback = UserFallBack.class,configuration = FeignConfiguration.class) //configuration指定配置类public interface UserFeignClient { @GetMapping("/user/queryById/{id}") public CommonVo
浏览器输入地址,控制台输出的信息如下: