欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【SpringCloud组件学习笔记系列】(3)OpenFeign组件

时间:2023-06-08
SpringCloud逐渐你学习笔记系列

【SpringCloud组件学习笔记系列】(1)Eureka组件
【SpringCloud组件学习笔记系列】(2)Hystrix组件
【SpringCloud组件学习笔记系列】(3)OpenFeign组件
【SpringCloud组件学习笔记系列】(4)Gateway组件
【SpringCloud组件学习笔记系列】(5)Config组件

3、SpringCloud Netflix OpenFeign的使用以及讲解

Feign可以把Rest请求进行隐藏,伪装成类似SpringMVC的Controller一样,不用再自己拼接URL,拼接参数等等操作,Feign可以接管这些并自动完成。

3.1、Feign的使用 3.1.1、依赖引入

在consumer的pom文件中引入:

org.springframework.cloud spring-cloud-starter-openfeign

3.1.2、客户端配置

创建客户端接口类,添加添加@FeignClient注解,指定需要访问的服务名

@FeignClient("User-Service") // user-service为服务提供者的微服务名称public interface UserFeignClient { @GetMapping("/user/queryById/{id}") // feign对该请求地址做处理成http://user-service/user/queryById/id,十分优雅 public CommonVo queryById(@PathVariable("id") Long id);}

3.1.3、编写新的Controller

@RestController@RequestMapping("/UserFeign")public class UserByFeignController { @Autowired private UserFeignClient client; // 注入Feign的客户端,以供使用 @GetMapping("/user/queryById/{id}") public CommonVo queryById(@PathVariable("id") Long id){ CommonVo userCommonVo = client.queryById(id); return userCommonVo; }}

3.1.4、启动类

添加开启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、开启Hystrix

Feign集成了Hystrix,不过默认是关闭的,需要在配置文件中开启。

feign: hystrix: enabled: true # 开启Feign的熔断功能

3.3.2、使用Hystrix

编写Feign客户端的实现类

@Componentpublic class UserFallBack implements UserFeignClient{ @Override public CommonVo queryById(Long id) { return new CommonVo<>(400,"抱歉,联通网络提醒您,您请求的服务暂时联不通,请稍后再试!!!",null); }}

修改客户端中,@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 queryById(@PathVariable("id") Long id);}

3.3.3、测试前后区别

开启消费者、提供者以及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; }}

这里指定的Level级别是FULL,Feign支持4种级别:

NONE:不记录任何日志信息,这是默认值。BASIC:仅记录请求的方法,URL以及响应状态码和执行时间HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

3.5.3、指定配置类

// user-service为服务提供者的微服务名称@FeignClient(value = "User-Service",fallback = UserFallBack.class,configuration = FeignConfiguration.class) //configuration指定配置类public interface UserFeignClient { @GetMapping("/user/queryById/{id}") public CommonVo queryById(@PathVariable("id") Long id);}

3.5.4、测试

浏览器输入地址,控制台输出的信息如下:

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。