八、熔断机制
熔断机制是对雪崩效应的一种微服务链路保护机制。当链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快读返回错误的响应信息
当检测到该节点微服务调用响应正常后,恢复调用链路
GateWay新一代网关
路由
断言
过滤
作用
可以实现 反向代理、鉴权、流量控制、熔断、日志监控等功能
动态路由

注意:
server:
  port: 9527
spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      routes:
        - id: payment_route1
          uri: lb://CLOUD-PAYMENT-SERVICE # Matches /payment/get/**
          predicates:
            - Path=/payment/get/**
        - id: payment_route2
          uri: lb://CLOUD-PAYMENT-SERVICE # Matches /payment/lb/**
          predicates:
            - Path=/payment/lb/**
            # After 属性表示什么时间之后才可以访问
            #- After=2023-07-28T15:16:37.485+08:00[Asia/Shanghai]
            # cookie中必须有值,值必须是zzyy
            #- Cookie=username,zzyy
            # 表示请求头必须有这个属性,且该属性值必须是整数
            #- Header=X-Request-Id, \d+  # 请求头要有X-Request-Id属性并且值为整数的正则表达式
eureka:
  instance:
    hostname: cloud-gateway-service
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
# Ribbon configuration for the cloud-payment-service
cloud-payment-service:
  ribbon:
    ReadTimeout: 5000
    ConnectTimeout: 5000

运行结果:
Cookie
Hander属性

Gateway的Filter
创建Filter类
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("*******全局过滤*********"+new Date());
        String username=exchange.getRequest().getQueryParams().getFirst("username");
        if (username==null){
            log.info("用户名为空,非法用户");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }
    @Override
    public int getOrder() {
        return 0;
    }
}
如果请求地址中有username属性,则正常访问,如果没有则返回406错误

分布式配置中心
每一个
配置文件优先级

@