楼子湾

导航

 

一.什么是gateway

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全(权限验证等),监控/指标,限流。
提前声明:Spring Cloud Gateway 底层使用了高性能的通信框架Netty。

相关概念:

  • Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
  • Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
  • Filter(过滤器):这是org.springframework.cloud.gateway.filter.GatewayFilter的实例,我们可以使用它修改请求和响应。

客户端向 Spring Cloud Gateway 发出请求。如果 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。 过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前(“pre”)或之后(“post”)执行业务逻辑。

Spring Cloud Gateway 的特征:

  • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
  • 动态路由
  • Predicates 和 Filters 作用于特定路由
  • 集成 Hystrix 断路器
  • 集成 Spring Cloud DiscoveryClient
  • 易于编写的 Predicates 和 Filters
  • 限流
  • 路径重写

二.gateway的引入

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

 

三.gateway的配置

详见官方文档

https://docs.spring.io/spring-cloud-gateway/docs/2.2.6.RELEASE/reference/html/#gateway-how-it-works

server.port: 8082

spring:
  application:
    name: gateway
  redis:
      host: localhost
      port: 6379
      password: 123456
  cloud:
    gateway:
      routes:
        - id: rateLimit_route
          uri: http://localhost:8000  请求转发地址,这里也可以配置服务的集群名称如:lb://provider-service
          order: 0    路由的执行等级
          predicates:   断言:path表示url以foo开头的转发到uri的地址
            - Path=/foo/**
          filters:      过滤器
            - StripPrefix=1
            - name: RateLimiter 表示限流
            - name: Hystrix  熔断器
              args:
                name: fallbackcmd  回调名称,下面的fallbackUri回调地址,目前只支持forward
                fallbackUri: forward:/fallback  hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000
  // 多个路由同样配置,id(名称)不一样即可
 - id: auth-service
          uri: lb://auth-service  请求转发地址,这里也可以配置服务的集群名称如:lb://provider-service
          order: 0    路由的执行等级
          predicates:   断言:path表示url以foo开头的转发到uri的地址
            - Path=/foo/**
          filters:      过滤器
            - StripPrefix=1
            - name: RateLimiter 表示限流
            - name: Hystrix  熔断器
              args:
                name: fallbackcmd  回调名称,下面的fallbackUri回调地址,目前只支持forward
                fallbackUri: forward:/fallback  hystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds: 5000
 

 

四.配置熔断器

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

也说断路器

服务降级
服务熔断
服务限流
接近实时的监控

熔断器需要配置在消费者即服务的调用方这边,每个服务调用方都需要配置

 

posted on 2021-02-08 16:38  楼子湾  阅读(121)  评论(0)    收藏  举报