1.Spring Cloud GateWay是什么

这个项目提供了一个在Spring WebFlux上构建API网关的库。Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到api,并为它们提供横切关注点,如:安全性、监控/指标和弹性。

2.Spring Cloud GateWay 作用

作为访问内部系统唯一的入口,除了提供内部的路由中转外,我们还可以在此基础上提供

身份验证、监控、负载均衡、限流、降级、鉴权 等功能

3.快速开始GateWay

        1.术语

                Route:网关的基本组成部分。它由一个ID、一个目标URI、一个谓词集合和一个过滤器
                           集合定义。如果聚合谓词为真,则匹配路由

               Predicate:这是一个Java 8函数谓词

                                输入类型是SpringFramework ServerWebExchange

                                这允许您匹配来自HTTP请求的任何内容例如头或参数

                Filter:这些是使用特定工厂构造的GatewayFilter实例。
                          在这里,您可以在发送下游请求之前或之后修改请求和响应

        

        2.快速开始案例

2.1 新建网关项目,配置yml文件

spring:
  cloud:
    gateway:
      routes:
        // 路由器唯一标识
        - id: order_route
          // 断言 
          predicates:
            // 路径匹配 uri + order/ 下所有请求则会为真,进行路由匹配 
          - Path=/order/**
          // 请求uri
          uri: http://www.fanwenjun.com
          // 过滤器
          filters:
          // 对下发的请求会剥离1个路径个数
          - StripPrefix=1

server:
  port: 80

 2.2 启动网关服务

2.3 启动order服务

 

 3.网关工作原理

1、客户端向 Spring Cloud GateWay发送一个请求

2、如果网关处理程序映射确定一个请求路由匹配,它将被发送到 GateWay Web Handler

3、这个处理程序通过特定于请求的筛选器链式运行请求。其中虚线部分指的是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有的"pre"过滤逻辑

4、发出代理请求,运行"POST"筛选器逻辑

4.自定义拦截器

/**
 * @author Jun
 * @version 1.0.0
 * @ClassName MyFilter.java
 * @Description TODO 自定义网关拦截器
 * @createTime 2021年08月07日 15:59:00
 */
@Component
public class MyFilter implements Ordered, GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        // 获取请求
        ServerHttpRequest request = exchange.getRequest();

        // 获取请求参数集
        MultiValueMap<String, String> queryParams = request.getQueryParams();
        List<String> ids = queryParams.get("id");
        
        // TODO 业务逻辑判断后,可选择继续通行或返回response

        // 通行
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        // 拦截器请求顺序,返回值越小,优先级越高
        return 0;
    }
}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐