什么是Feign?[熟练]
-
定义:是微服务之间通过http协议调用的简化使用的框架
-
事实:
- Feign自动集成Ribbon,且默认开启相关功能
- Feign自动集成Hystrix,但默认关闭,需要手动开启
-
使用:
-
导包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
-
配置
ribbon: ConnectTimeout: 1000 # 连接超时时间 默认1s ReadTimeout: 3000 # 逻辑处理的超时时间 默认1s
-
编码
-
开启Feign功能
@EnableFeignClients
-
编写Feign接口
// 指定当前类的方法都从Eureka中对应的服务去调用 @FeignClient("服务的名称") public interface ProviderService { // 通过Controller的地址映射注解告诉Feign该类findOne2方法从服务提供者的/findOne/{id}地址获取信息 // 通过Controller的参数获取注解告诉Feign的参数信息 // 通过返回值告诉Feign应该返回的参数应该封装的格式 @GetMapping("/goods/findOne/{id}") public Goods findOne(@PathVariable("id") int id); }
-
-
SpringBoot开启DEBUG日志[精通]
-
开启SpringBoot框架的DEBUG日志
-
开启全部
# 设置当前的日志级别 debug,feign只支持记录debug级别的日志 logging: level: root: debug
-
开启部分
logging: level: com.itheima: debug
-
-
开启Feign的日志
-
必须开启对应Feign接口包的日志为DEBUG
-
编码
-
定义日志级别
@Configuration public class FeignLogConfig { /* NONE,不记录 BASIC,记录基本的请求行,响应状态码数据 HEADERS,记录基本的请求行,响应状态码数据,记录响应头信息 FULL;记录完成的请求 响应数据 */ @Bean public Logger.Level level(){ return Logger.Level.FULL; } }
-
配置生效
@FeignClient(value = "FEIGN-PROVIDER",configuration = FeignLogConfig.class)
-
-
什么是Hystrix?
-
定义:是一个可以用来在微服务中防止级联调用引起雪崩的技术工具
-
作用:
- 隔离:用于隔离不同调用链之间相互不受影响
- 降级:封装友好的错误提示并返回
- 熔断:当请求错误率较高时,自动降级熔断
- 限流:合理分配每个调用的并发请求数量
-
图
-
使用
-
导包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
-
配置
- 无降级配置
-
编码
-
降级
-
开启降级功能
@EnableCircuitBreaker
-
编码
-
提供一个降级时调用的方法
- 降级方法必须和正常处理方法返回值和参数一样
- 进入降级处理方法时的条件
- 正常处理方法出现异常
- 正常处理方法(读)超时
-
-
连接池满或者信号量满时
-
-
-
配置在哪里降级
``` @HystrixCommand(fallbackMethod = "findOne_fallback",commandProperties = { //设置Hystrix的超时时间,默认1s @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "3000"), //监控时间 默认5000 毫秒 @HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value = "5000"), //失败次数。默认20次 @HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "20"), //失败率 默认50% @HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value = "50") }) public Goods findOne(@PathVariable("id") int id){ }
-
Feign与Hystrix的集成使用【熟悉】
-
开启Hystrix功能
# 开启feign对hystrix的支持 feign: hystrix: enabled: true
-
实现Feign接口(实现降级的处理方法)
@Component public class GoodsFeignClientFallback implements GoodsFeignClient { @Override public Goods findGoodsById(int id) { Goods goods = new Goods(); goods.setTitle("又被降级了~~~"); return goods; } }
-
配置降级使用的类
@FeignClient(value = "HYSTRIX-PROVIDER",fallback = GoodsFeignClientFallback.class)
熔断【熟悉】
- 状态
什么是Gateway?
-
定义:前端统一访问微服务的人口
-
功能:
- 认证
- 鉴权
- 日志
- 监控
- 缓存
- 负载均衡
- 流量控制
-
事实:
- Gateway自动集成Ribbon,且默认开启相关功能
-
使用:
-
导包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>
-
配置
- 路由配置
- id:自定义服务名称(唯一)
- uri:请求转发的目的地
- 静态路由:http://localhost:8080/
- 动态路由:lb://服务名称
- predicates:那些请求需要使用该路由配置进行转发
- Path=/goods/** 依据请求路径来匹配转发的请求
- filter
- 路由配置
-
编码
无
-
网关过滤器【精通】
对请求进行功能的增强(认证、设置凭证信息等)
-
局部过滤器:只对配置的路由进行生效
- org.springframework.cloud.gateway.filter.factory.过滤器名称GatewayFilterFactory
-
全局过滤器:所有请求都生效
- GlobalFilter
- Ordered指定过滤器执行的顺序,越小越先执行)
@Component public class MyFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { System.out.println("自定义全局过滤器执行了~~~"); return chain.filter(exchange);//放行 } /** * 过滤器排序 * @return 数值越小 越先执行 */ @Override public int getOrder() { return 0; } }