spring cloud gateway入门


Spring Cloud Gateway简介

Zuul闭源之后,Spring开发了Spring新一代微服务网关Spring Cloud Gateway来代替Zuul,基于Spring5、Spring boot 2以及project Reactor。Spring Cloud Gateway旨在提供一种简单的、有效的方式来路由API。

Spring Cloud Gateway基于Spring WebFlux以及使用Netty作为底层的网络通信框架,所以之前使用到的同步框架或者使用方式会不适用。

Maven依赖:

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

Spring Cloud Gateway术语

  • Route: 构建网关的基本模块。路由 ID, 目标 URI, 一系列断言(predicates), 以及一组过滤器( filters)组成了一个路由,当这些断言对请求路径的匹配结果返回true时,网关才会进行处理。
  • Predicate: Java 8 的函数式断言接口.。入参是 Spring Framework ServerWebExchange。能够匹配请求体里的任何信息,比如:http header,url。
  • Filter: 使用具体的工厂类创建的Spring Framework GatewayFilter。通过过滤器可以修改请求体在发送请求到下游的服务之前,或是在得到下游服务响应体后修改响应体。

架构图

Spring Cloud Gateway Diagram

客户端将请求发送到Spring Cloud GatewayGateway Handler Mapping进行路由匹配,如果匹配成功则Gateway web handler会处理请求:请求会通过一组预先设定好的过滤器。大概流程是先执行预过滤逻辑、执行请求、得到结果执行后置过滤。

配置路由

路由可以通过配置文件配置和Java代码配置,配置文件配置又可以分为简化配置和全参配置。

简化配置

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - Cookie=mycookie,mycookievalue

这段yaml配置了一个Cookie路由断言,将会匹配cookie名为mycookie值为mycookievalue的请求。

全参配置

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - name: Cookie
          args:
            name: mycookie
            regexp: mycookievalue

这段配置与上面的路由配置一样,但是使用了args作为键来配置具体的断言参数

Java 代码配置

通过RouteLocatorBuilder可以进行链式调用构建路由:

@Configuration
public class RouteConfig {
  @Bean
  public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder
        .routes()
        .route("after_route", r -> r.cookie("mycookie", "mycookievalue").uri("https://example.org"))
        .build();
  }
}

总结

Spring Cloud Gateway作为新一代微服务网关提供了易于配置路由的特性,但是其底层使用到了异步、NIO、响应式编程,所以如果需要进行深入开发,开发者需要改变传统的编程思维。


文章作者: Ubi-potato
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ubi-potato !
评论
  目录