八、熔断机制
熔断机制是对雪崩效应的一种微服务链路保护机制。当链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快读返回错误的响应信息
当检测到该节点微服务调用响应正常后,恢复调用链路
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错误
分布式配置中心
每一个
配置文件优先级
@