zoukankan      html  css  js  c++  java
  • Spring-Cloud-GateWay

    概述

    什么是Spring-Cloud-GateWay

    1. Spring Cloud Gateway 基于 Spring Boot 2, 是 Spring Cloud 的 全新 项目, 该项 目 提供 了 一个 构建 在 Spring 生态 之上 的 API 网关
    2. Spring Cloud Gateway 旨在 提供 一种 简单 而 有效 的 途径 来 转发 请求, 并为 它们 提供 横 切 关注 点, 例如: 安全性、 监控/ 指标 和 弹性

    优点

    1. 性能比较高, 是第一代网关zuul的1.6倍
    2. 功能强大, 内置了很多功能,转发/监控/限流
    3. 容易扩展

    缺点

    1. 实现依赖Netty和WebFlux,不是传统的Servet模型
    2. 不能将其部署在Tomcat,Jetty等Servelt容器当中,只能打成Jar包执行
    3. 需要springboot2.0及以上版本才支持

    词汇

    Route路由

    路由网关的基本构建块。 它由ID,目标URI,谓词集合和过滤器集合定义。 如果聚合谓词为真,则匹配路由

    Predicate谓词

    对请求的内容进行匹配,条件筛选

    Filter过滤器

    可以对请求进行过滤,在发送下游请求之前或之后修改请求和响应

    快速入门

    1. 创建gateWay服务

    在这里插入图片描述

    2. 导入依赖

    在这里插入图片描述

    <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
            <dependency>
                <groupId>io.projectreactor.netty</groupId>
                <artifactId>reactor-netty</artifactId>
                <version>0.9.4.RELEASE</version>
            </dependency>
    
        </dependencies>
    

    3. 创建启动类

    在这里插入图片描述

    4. 添加配置

    在这里插入图片描述

    server:
      port: 9000
    
    spring:
      application:
        name: api-gateway #此实例注册到eureka服务端的name
      cloud:
        gateway:
          routes: #当请求满足要求时,转发到指定的服务当中
            - id: goods_route  #唯一标识,默认是uuid
              uri: http://localhost:8000/ #请求要转发的地址
              order: 1 #路由优先级 越小, 优先级越高
              predicates: #谓词,断言(条件判断 转发请求要满足什么条件)
                - Path=/api/**  #当路径中有指定内容时, 才会转发到指定uri
              filters: #过滤器,拦截请求做一些额外处理
                - StripPrefix=1  #去掉添加的path内容
    

    运行访问http://localhost:9000/api/服务地址
    在这里插入图片描述

    GateWay整合Nacos

    1. 在配置文件中添加Nacos的依赖, 把gatWay注册到Nacos当中
      在这里插入图片描述
     <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
    1. 在配置文件当中添加nacos的地址
      在这里插入图片描述
    2. 在启动类上添加注解
      在这里插入图片描述
    @EnableDiscoveryClient
    
    1. 配置gateWay从nacos中获取服务信息
      在这里插入图片描述
      discovery:
            locator:
              enabled: true #从nacos当中获取服务信息
    
    1. 信息uri为服务地址
      在这里插入图片描述
      在这里插入图片描述
      http://localhost:9000/api/getGoods

    谓词

    什么是谓词(断言)

    1. 用于对请求进行判断 ,只有断言都返回值,才会真正的执行路由
    2. 满足条件,才能进行过滤,转发

    内置断言工厂

    基于Datetime

    1. AfterRoutePredicateFactory:

    判断请求日期是否晚于指定的日期
    参数:传递一个日期

    示例
    在这里插入图片描述
    2. BeforeRoutePredicateFactory

    判断请求日期是否早于指定日期
    参数:传递一个日期

    1. BetweenRoutePredicateFactory

    判断请求日期是否在指定日期之间
    参数:传递两个日期

    基于远程地址

    RemoteAddrRoutePredicateFactory

    判断请求主机地址是否在指定地址段时 参数:IP地址段
    在这里插入图片描述

    基于Cookie的断言

    CookieRoutePredicateFactory

    判断请求cookie是否具有给定名称且值与正则表达式匹配
    参数:cookie名称 , 正则表达式

    示例

    - Cookie=myCookName,[^gao]
    

    基于header

    HeaderRoutePredicateFactory

    判断请求Header是否具有给定名称且值与正则表达式匹配
    参数:标题名称 , 正则表达式

    示例:

    	- Header=Request-Id,d+
    

    基于Host

    HostRoutePredicateFactory

    判断请求的Host是否满足匹配条件
    参数:主机名模式

    示例

    - Host=**.testhost.org
    

    基于Methods

    MethodRoutePredicateFactory

    判断请求类型是否为指定的类型
    参数:请求类型

    示例

    -Method=GET
    

    基于Query请求参数

    QueryRouterPredicateFactory

    判断请求参数是否具有给定名称且值与正则表达式匹配 参数:请求参数名,正则表达式

    示例

    • Query=name,test.

    基于权重的断言工厂
    WeightRoutePredicateFactory

    对于同一组内容的路由,按权重进行转发
    参数 : 组名,权重

    示例
    在这里插入图片描述

    1. 两个对于 / weight/** 路径转发的路由定义,这两个路由是同一个权重分组,且 weight_ route1 权重为 1,
    2. weight_ route2 权重为9 对于10个访问/ weight/** 路径的请求来说,将会有9个路由到 weight_ route2,1个路由到 weight_ route1

    过滤器

    什么是过滤器

    1. GatewayFilter 网关过滤器用于拦截并链式处理web请求,可以实现横切的与应用无关的需求,比如:安全、访问超时的设置等
    2. 在请求传递过程当中,对请求和响应进行一些额外的处理

    生命周期

    1. pre

    在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等

    1. post

    在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等

    分类

    1. 局部过滤器
      只作用在某 一个路由上
    2. 全局过滤器
      作用在全部路由上

    内置局部过滤器

    1. AddRequestHeader: 为原始请求添加Header ,Header名称及值
    2. AddRequestParameter:为原始请求添加请求参数,参数名及值
    3. AddResponseHeader:为原始响应添加Header,Header名称及值
    4. DedupeResponseHeader:剔除响应头中重复的值,需要去重的Header名称及重复策略
    5. Hystrix:为路由引入Hystrix的断路器保护,HystrixCommand名称
    6. FallBackHeader:为fallbackUri的请求头中添加具体的异常信息, Header的名称
    7. PrefixPath:为原始请求添加前缀,前缀路径
    8. PreserveHostHeader:为请求添加一个PreservHostHeader=true的属性,路由过滤器会检查该属性以决定是否要发送原始的Host 没有参数
    9. RequestRateLimiter:用于对请求限流
    10. RedirectTo:将原始请求重定向到指定的URL,http状态码及重定向的url
    11. RemoveHopByHopHeadersFilter:为原始请求删除IETF组织规定的一系列Header,默认就会启用
    12. RewritePath:重写原始请求路径,原始路径正则表达式及重写后路径的正则表达式
    13. RewriteResponseHeader:重写原始请求中的某个Header,Header名称,值的正则表达式,重写后的值
    14. SaveSession:在请求转发之前,强制执行webSession::save操作
    15. secureHeaders:为原始响应添加一系列安全作用的响应头
    16. SetStatus:修改响应的状态码,HTTP状态码,可以是数字也可以是字符串
    17. StripPrefix:用于截断原始请求的路径,使用数字表示要截断的路径的数量
    18. Retry:针对不同的响应进行重试
    19. RequestSize:设置允许接收最大请求包的大小,请求包大小,单位为字节
    20. ModifyRequestBody:在转发请求之前修改原始请求体内容,修改后的请求体内容
    21. ModifyResponseBody:修改原始响应体的内容,修改后的响应体内容

    举例:
    在这里插入图片描述

    全局内置过滤器

    在这里插入图片描述

    工作流程

    在这里插入图片描述
    介绍:

    1. DispatcherHandler

    所有请求的调度器,负载请求分发

    1. RoutePredicateHandlerMapping

    路由谓语匹配器,用于路由的查找,以及找到路由后返回对应的WebHandler,
    ispatcherHandler会依次遍历HandlerMapping集合进行处理

    1. FilteringWebHandler

    使用Filter链表处理请求的WebHandler, RoutePredicateHandlerMapping找到路由后返回对应的FilteringWebHandler对请求进行处理,FilteringW
    ebHandler负责组装Filter链表并调用链表处理请求。

  • 相关阅读:
    Python os模块简单应用
    requests获取源代码时中文乱码问题
    python 正则表达式findall和search用法
    linux source路径配置 省掉每次source的烦恼
    mstar屏参调试说明
    Mstar supernova方案调试笔记-001
    NonOS方案屛参的TOTAL和PLL SET值的设置
    supernova系统 Mrsv 简介笔记
    【工作随笔】Javascript 日期获取封装组件
    如何理解springboot中,mapper接口的实现类由持久层框架进行创建,而不由spring创建?
  • 原文地址:https://www.cnblogs.com/joker-dj/p/12767940.html
Copyright © 2011-2022 走看看