• JSD-2204-(续)SpringGateway网关-Elasticsearch-Day06


    1.续Spring Gateway网关

    1.1网关路由配置

    上次课完成了路由的基本配置

    下面对当前项目所有服务器添加路由配置信息

    1. server:
    2. port: 9000
    3. spring:
    4. application:
    5. name: gateway
    6. cloud:
    7. nacos:
    8. discovery:
    9. # 网关也是微服务项目的一部分,所以也要注册到Nacos
    10. server-addr: localhost:8848
    11. gateway:
    12. # routes是一个数组,数组中的数据使用"-"开头表示数据中的一个对象
    13. routes: # 开始编写Gateway路由配置
    14. - id: gateway-shanghai
    15. uri: lb://shanghai
    16. predicates:
    17. - Path=/sh/**
    18. # 当前路由的名称,和任何其他名称没有关联,只是不能和后面再出现的路由名称重复
    19. - id: gateway-beijing
    20. # 当匹配当前路由设置时,访问指定的服务器名称(Nacos注册的服务器名称)
    21. # lb是LoadBalance的缩写,是负载均衡的调用
    22. uri: lb://beijing
    23. # 编写断言配置,断言的意思就是满足指定条件时运行某些事情
    24. # predicates:断言
    25. predicates:
    26. # 断言中我们编写当路径满足指定条件时
    27. # 当请求路径以/bj/开头时,就会路由到上面设置好的beijing服务器运行
    28. # ↓ P大写!!!!!!!!
    29. - Path=/bj/**
    30. # spring.cloud.gateway.routes[0].uri
    31. # spring.cloud.gateway.routes[0].predicates[0]

    上面的yml配置了bejing和shanghai项目的路由信息

    我们使用

    http://localhost:9000/bj/show可以访问beijing服务器的资源

    http://localhost:9000/sh/show可以访问shanghai服务器的资源

    以此类推,再有很多服务器时,我们都可以仅使用9000端口号来将请求路由到正确的服务器

    就实现了gateway成为项目的统一入口的效果

    1.2动态路由

    网关项目随着微服务数量的增多

    gateway项目的yml文件配置会越来越多,维护的工作量也会越来越大

    所以我们希望gateway能够设计一套默认情况下自动路由到每个模块的路由规则

    这样的话,不管当前项目有多少个路由目标,都不需要维护yml文件了

    这就是我们SpringGateway的动态路由功能

    配置文件中开启即可

    1. server:
    2. port: 9000
    3. spring:
    4. application:
    5. name: gateway
    6. cloud:
    7. nacos:
    8. discovery:
    9. # 网关也是微服务项目的一部分,所以也要注册到Nacos
    10. server-addr: localhost:8848
    11. gateway:
    12. discovery:
    13. locator:
    14. # 这是开启动态路由的配置,动态路由设置默认是不开启的 也就是enabled: false
    15. # 路由规则是在网关端口号后,先写路由目标注册到nacos的名称,再编写具体路径
    16. # localhost:9000/beijing/bj/show
    17. enabled: true

    路由规则是在9000端口号后面先编写路由目标项目注册到nacos的名称,再编写具体路径

    1.3内置断言

    我们上次课在网关配置中使用了predicates(断言)的配置

    断言的意思就是判断某个条件是否满足

    我们之前使用了Path断言,判断请求的路径是不是满足条件,例如是不是/sh/** /bj/**

    如果路径满足这个条件,就路由到指定的服务器

    但是Path实际上只是SpringGateway提供的多种内置断言中的一种

    还有很多其它断言

    • after
    • before
    • between
    • cookie
    • header
    • host
    • method
    • path
    • query
    • remoteaddr

    1.3.1时间相关

    after,before,between

    判断当前时间在指定时间之前,之后或之间的操作

    如果条件满足可以执行路由操作,否则拒绝访问

    表示时间的格式比较特殊,先使用下面代码获得时间

    ZonedDateTime.now()
    

    运行程序输出,可获得当前时间,这个时间的格式可能是

    2022-08-25T10:11:32.694+08:00[Asia/Shanghai]
    

    下面在yml配置中添加新的断言配置

    使用After设置必须在指定时间之后访问

    1. routes: # 开始编写Gateway路由配置
    2. - id: gateway-shanghai
    3. uri: lb://shanghai
    4. predicates:
    5. - Path=/sh/**
    6. # 必须满足所有断言条件才能成功路由
    7. # 路径必须是sh开头 && 实际必须在下面时间之后
    8. - After=2022-08-25T10:18:40.694+08:00[Asia/Shanghai]

    必须在指定时间之后才能访问服务

    否则发生404错误拒绝访问

    需要注意测试时,先启动Nacos,再启动shanghai之后启动gateway

    测试时必须通过9000端口访问才能有效果

    使用Before设置必须在指定时间之前访问

    1. routes: # 开始编写Gateway路由配置
    2. - id: gateway-shanghai
    3. uri: lb://shanghai
    4. predicates:
    5. - Path=/sh/**
    6. # 必须满足所有断言条件才能成功路由
    7. # 路径必须是sh开头 && 实际必须在下面时间之后
    8. - Before=2022-08-25T10:22:10.694+08:00[Asia/Shanghai]

    使用Between设置必须在指定时间之间访问

    1. routes: # 开始编写Gateway路由配置
    2. - id: gateway-shanghai
    3. uri: lb://shanghai
    4. predicates:
    5. - Path=/sh/**
    6. # 必须满足所有断言条件才能成功路由
    7. # 路径必须是sh开头 && 实际必须在下面时间之后
    8. - Between=2022-08-25T10:23:50.694+08:00[Asia/Shanghai],2022-08-25T10:24:30.694+08:00[Asia/Shanghai]

    1.3.2要求指定参数的请求

    Query断言,判断是否包含指定的参数名称,包含参数名称才能通过路由

    1. routes: # 开始编写Gateway路由配置
    2. - id: gateway-shanghai
    3. uri: lb://shanghai
    4. predicates:
    5. - Path=/sh/**
    6. # 当前请求必须包含名为name的参数,才能正常路由
    7. - Query=name

    1.4内置过滤器

    Gateway

  • 相关阅读:
    教你划分必要开支和非必要开支
    小程序实现人脸识别功能
    堆排序和Top-K问题(C语言实现)
    (C++)验证回文字符串
    OpenHarmony ArkTS工程目录结构(Stage模型)
    QWEN technical report
    QT day3
    ArrayList源码解析(JDK8)
    【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)
    如何获取Adreno GPU数据
  • 原文地址:https://blog.csdn.net/TheNewSystrm/article/details/126530556