[000-01-008].Gateway使用

5.GetWay的高级特性(实际工作中使用)

5.1.Predicate介绍:

a.Predicate源码阅读:

  • 1.由以下代码可以看出Predicate是一个接口,且由注解@FunctionalInterface可以看出他是一个函数式接口,即接口中就只有个抽象方法
    在这里插入图片描述

a.Predicate是什么:

  • 1.启动9527,可以看到如下Predicate
    在这里插入图片描述
  • 2.断言:路径相匹配的进行路由

b.Route Predicate Factories是什么东东??

  • 1.Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分
  • 2.Spring Cloud Gateway包括许多内置的Route Predicate 工厂,所有这些Predicate都与Http请求的不同属性相匹配,多个Route Predicate工厂可以进行组合
  • 3.Spring Cloud Gateway创建Route对象时,使用RoutePredicateFactory创建Predicate对象,Predicate对象可以赋值给Route,SpringCloudGateway包含许多内置的RoutePredicateFactores
  • 4.所有这些谓词都匹配Http请求的不同属性。多种谓词工厂可以组合,并通过逻辑 and

c.常用的RoutePredicate:

在这里插入图片描述

d.常用的Predicate

  • After Route Predicate:在什么时间之后执行
    在这里插入图片描述
  • Before Route Predicate:在什么时间之前执行
  • Between Route Predicate:在什么时间之间执行
  • Cookie Route Predicate:Cookie级别
    在这里插入图片描述

6.5.常用的测试工具:

  • jmeter
  • postman
  • curl
// curl命令进行测试,携带Cookie
curl http://localhost:9527/payment/lb --cookie "username=zzyy"
  • Header Route Predicate:携带请求头
  • Host Route Predicate:什么样的URL路径过来
  • Method Route Predicate:什么方法请求的,Post,Get
  • Path Route Predicate:请求什么路径 - Path=/api-web/**
  • Query Route Predicate:带有什么参数的

6.Filter的使用

7.1.概念

  • 1.指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者路由之后对请求进行修改
  • 2.路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用
  • 3.Spring Cloud Gateway内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生的

7.2.生命周期:

  • 1.pre
  • 2.Post

7.3.种类:

  • 1.GatewayFilter:单一功能的过滤器
  • 2.GlobalFilter:全局的过滤器

7.4.自定义全局GlobalFilter

a.主要作用:

  • 全局日志记录
  • 统一网关鉴权

b.需要实现接口:

  • 1.implements GlobalFilter, Ordered

c.全局过滤器代码如下:

@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("come in global filter: {}", new Date());

        ServerHttpRequest request = exchange.getRequest();
        String uname = request.getQueryParams().getFirst("uname");
        if (uname == null) {
            log.info("用户名为null,非法用户");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        // 放行
        return chain.filter(exchange);
    }

    /**
     * 过滤器加载的顺序 越小,优先级别越高
     *
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

===========

============================================

  • 4.GetWay有如下特点:
    • 动态路由,能匹配任何请求属性
    • 可以对路由指定Predicate(断言) 和 Filter(过滤器)
    • 集成Hystrix的断路器功能
    • 集成Spring Cloud服务发现功能
    • 易于编写Predicate 和 Filter
    • 请求限流功能
    • 支持路径重写

c.GetWay模型:

在这里插入图片描述

  • 1.传统的Web框架,比如Struts2,Spring MVC等都是基于Servlet API 与Servlet容器基础之上运行的
  • 2.但是在Servlet 3.1之后有了异步非阻塞的支持,而WebFlux是一个典型的非阻塞异步的框架,它的核心是基于Reactor的相关API实现的,相对于传统的Web框架来说,它可以运行在如 Netty,Undertow 及支持Servlet3.1的容器上。非阻塞式 + 函数式编程(Spring5必须让你使用Java8)
  • 3.Spring WebFlux是Spring 5.0引入的新的响应式框架,区别与Spring MVC,他不依赖Servlet API,它是完全异步非阻塞的,并且基于Reactor来实现响应式流规范

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下命令启动这些 jar 包: ``` nohup java -jar codegen-service.jar > codegen-service.log & nohup java -jar data-market-service-integration.jar > data-market-service-integration.log & nohup java -jar data-market-service-mapping.jar > data-market-service-mapping.log & nohup java -jar data-market-service.jar > data-market-service.log & nohup java -jar data-masterdata-service.jar > data-masterdata-service.log & nohup java -jar data-metadata-service-console.jar > data-metadata-service-console.log & nohup java -jar data-metadata-service.jar > data-metadata-service.log & nohup java -jar data-quality-service.jar > data-quality-service.log & nohup java -jar data-standard-service.jar > data-standard-service.log & nohup java -jar data-visual-service.jar > data-visual-service.log & nohup java -jar datax-auth.jar > datax-auth.log & nohup java -jar datax-config.jar > datax-config.log & nohup java -jar datax-eureka.jar > datax-eureka.log & nohup java -jar datax-gateway.jar > datax-gateway.log & nohup java -jar datax-tool-monitor.jar > datax-tool-monitor.log & nohup java -jar email-service.jar > email-service.log & nohup java -jar file-service.jar > file-service.log & nohup java -jar quartz-service.jar > quartz-service.log & nohup java -jar system-service.jar > system-service.log & nohup java -jar workflow-service.jar > workflow-service.log & ``` 其中,`nohup` 命令可以使程序在后台运行,并将输出重定向到日志文件中。`&` 符号表示在后台运行该命令。请确保在执行此命令之前,已经安装了 Java 运行时环境,并且当前路径下存在相应的 jar 文件。如果 jar 文件不在当前路径下,可以使用绝对路径或相对路径指定文件的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值