iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringcloudGateway简介及相关配置方法
  • 400
分享到

SpringcloudGateway简介及相关配置方法

SpringcloudGateway配置SpringcloudGateway 2023-05-14 11:05:37 400人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录spring cloud Gateway 的核心功能:1、路由 Route:2、断言 Predicate:3、过滤器 filter:4、Predicate 断言条件(转发规则)介

官网:spring cloud gateway网关 (spring.io)

Doker官网:Doker 多克

Spring Cloud Gateway 的核心功能:

断言(Predicate):参照 Java8 的新特性Predicate,允许开发人员匹配 Http 请求中的任何内容,比如请求头或请求参数,最后根据匹配结果返回一个布尔值。
路由(route):由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则转发到该路由。
过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容。

1、路由 Route:

Route 主要由 路由id、目标uri、断言集合和过滤器集合组成,那我们简单看看这些属性到底有什么作用。
(1)id:路由标识,要求唯一,名称任意(默认值 uuid,一般不用,需要自定义)
(2)uri:请求最终被转发到的目标地址
(3)order: 路由优先级,数字越小,优先级越高
(4)predicates:断言数组,即判断条件,如果返回值是boolean,则转发请求到 uri 属性指定的服务中
(5)filters:过滤器数组,在请求传递过程中,对请求做一些修改

2、断言 Predicate:

        Predicate 来自于 Java8 的接口。Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
        Predicate 可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway 内置了许多 Predict,这些 Predict 的源码在 org.springframework.cloud.gateway.handler.predicate 包中,有兴趣可以阅读一下

3、过滤器 filter:

Gateway 过滤器的生命周期:
PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
Gateway 过滤器从作用范围可分为两种:
GatewayFilter:应用到单个路由或者一个分组的路由上(需要在配置文件中配置)
GlobalFilter:应用到所有的路由上(无需配置,全局生效)
(1)局部过滤器 GatewayFilter:
        Spring Cloud Gateway 中内置了许多的局部过滤器;局部过滤器需要在指定路由配置才能生效,默认是不生效的

(2)自定义局部过滤器:
        虽说内置的过滤器能够解决很多场景,但是难免还是有些特殊需求需要定制一个过滤器,下面就来介绍一下如何自定义局部过滤器。 

  (3) GlobalFilter 全局过滤器:
        
全局过滤器应用全部路由上,无需开发者配置,Spring Cloud Gateway 也内置了一些全局过滤器。GlobalFilter 的功能其实和 GatewayFilter 是相同的,只是 GlobalFilter 的作用域是所有的路由配置,而不是绑定在指定的路由配置上。多个 GlobalFilter 可以通过 @Order 或者 getOrder() 方法指定执行顺序,order值越小,执行的优先级越高。
 注意,由于过滤器有 pre 和 post 两种类型,pre 类型过滤器如果 order 值越小,那么它就应该在pre过滤器链的顶层,post 类型过滤器如果 order 值越小,那么它就应该在 post 过滤器链的底层

   (4) 过滤器规则(Filter)

过滤规则实例说明
PrefixPath- PrefixPath=/app在请求路径前加上app
RewritePath- RewritePath=/test, /app/test访问localhost:9022/test,请求会转发到localhost:8001/app/test
SetPathSetPath=/app/{path}通过模板设置路径,转发的规则时会在路径前增加app,{path}表示原请求路径
RedirectTo重定向
RemoveRequestHeader去掉某个请求头信息

注:当配置多个filter时,优先定义的会被调用,剩余的filter将不会生效

4、Predicate 断言条件(转发规则)介绍

每一个Predicate的使用,你可以理解为:当满足这种条件后才会被转发,如果是多个,那就是都满足的情况下被转发。

Path 方式匹配转发

通过Path转发示例,我们讲解下上面的两种配置,分别是application.yml以及RouteLocator

配置文件匹配地址转发

我们在application.yml配置文件内添加对应的路由配置,如下所示:

spring:
 
  application:
 
    name: spring-cloud-gateway-sample
 
  cloud:
 
    gateway:
 
      routes:
 
        - id: blog
 
          uri: http://blog.xx.com
 
          predicates:
 
            # 匹配路径转发
 
            - Path=/api-boot-datasource-switch.html
 
# 端口号
 
server:
 
  port: 9090

**先来解释下route的组成部分:**

  • id:路由的ID
  • uri:匹配路由的转发地址
  • predicates:配置该路由的断言,通过PredicateDefinition类进行接收配置。

在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html时就会被自动转发到http://blog.xx.com/api-boot-datasource-switch.html,这里要注意完全匹配Path的值时才会进行路由转发。

访问效果如下所示:

spring-cloud-gateway-path-predicate.png

RouteLocator 匹配路径转发

在上面的配置中,如果使用RouteLocator方式该怎么进行配置呢?

如下所示:

@Bean
 
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
 
  return builder.routes()
 
    .route("blog", r -> 
 
           r.path("/api-boot-datasource-switch.html").uri("http://blog.xx.com"))
 
    .build();
 
}

Before 方式匹配转发

当部署有访问时间限制的接口时,我们可以通过Before Predicate来完成某一个时间点之前允许访问,过时后则不允许转发请求到具体的服务,配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Before=2019-05-01T00:00:00+08:00[Asia/Shanghai]

在上面配置中,我们允许2019-05-01日凌晨之前通过路由转发到http://blog.xx.com,通过查看org.springframework.cloud.gateway.handler.predicate.BeforeRoutePredicateFactory源码我们发现,Spring Cloud GatewayBefore断言采用的ZonedDateTime进行匹配时间,这里要注意存在时区的问题,需要配置[Asia/Shanghai]作为中国时区。

After 方式匹配转发

After PredicateBefore配置使用一致,匹配某一个时间点之后允许路由转发,如下所示配置:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - After=2019-04-29T00:00:00+08:00[Asia/Shanghai]

在上面配置中允许2019-04-29凌晨之后进行转发到http://blog.xx.com

Between 方式匹配转发

那如果是一个时间段内允许请求转发,通过BeforeAfter组合配置也可以完成,不过Spring Cloud Gateway还是提供了Between方式,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Between=2019-04-29T00:00:00+08:00[Asia/Shanghai], 2019-05-01T00:00:00+08:00[Asia/Shanghai]

在上面配置中,允许在2019-04-29日凌晨后 & 2019-05-01凌晨之前请求转发到http://blog.xx.com

Cookie 方式匹配转发

Spring Cloud Gateway 还提供了根据Cookie值的方式匹配转发请求,如果请求中所携带的Cookie值与配置的Predicate匹配,那么就可以被允许转发到指定地址,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Cookie=hengboy, leo

在上面配置中,如果客户端发送请求时携带了"hengboy=leo"的Cookie信息,则允许请求转发。

**测试Cookie方式转发:**

curl http://localhost:9090 --cookie "hengboy=leo"

通过上面方式我们是可以成功转发请求的,如果我们修改Cookie的值,就会导致无法转发,出现404。

Header 方式匹配转发

Spring Cloud Gateway可以根据发送请求的Header信息进行匹配转发,加入我们可以根据X-Request-Id的值进行匹配,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Header=X-Request-Id, \d+

在上面配置中,如果X-Request-Id的值为数字,那么就可以转发到http://blog.xx.com,我们通过如下方式进行测试:

curl http://localhost:9090 -H "X-Request-Id:123456"

如果头信息为X-Request-Id:abc时,就会转发失败,出现404。

Host 方式匹配转发

Spring Cloud Gateway可以根据Host主机名进行匹配转发,如果我们的接口只允许\*\*.xx.com域名进行访问,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Host=\*\*.xx.com

测试如下所示:

 1. curl http://localhost:9090 -H "Host: xx.com"          // 匹配
 2. curl http://localhost:9090 -H "Host: api.xx.com"        // 匹配
 3. curl http://localhost:9090 -H "Host: admin.xx.com"  // 匹配
 3. curl http://localhost:9090 -H "Host: hengboy.com"          // 不匹配

请求方式 方式匹配转发

Rest请求风格的接口内往往会存在多种请求方式的接口,如果我们的接口只允许POST请求访问,那么配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Method=POST

发送GET请求测试:

~ curl http://localhost:9090
{"timestamp":"2019-04-29T06:27:41.121+0000","path":"/","status":404,"error":"Not Found","message":null}

我们的请求并未被Spring Cloud Gateway进行转发,那么我们再来通过POST请求进行测试:

curl -X POST http://localhost:9090

是可以被转发到目标地址uri的,不过我的这个博客是OSS部署的,阿里云限制了POST访问,尽管如此我们也证明了可以转发。

请求参数 方式匹配转发

Spring Cloud GateWay还支持根据指定的参数进行匹配,Query方式的Predicate也有两种方式匹配情况,如下所示:

请求中存在xxx参数

   cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
           - Query=xxx

我们通过curl http://localhost:9090\?xxx\=123是可以被成功转发的,只要参数存在xxx就会被成功转发,否则出现404转发失败。

请求中存在xxx参数且值为zzz

    cloud:
       gateway:
          routes:
            - id: blog
             uri: http://blog.xx.com
             predicates:
                - Query=xxx, zzz

根据上面配置,我们限定了参数xxx必须为zzz时才会被成功转发,否则同样会出现404抓发失败。

请求路径 方式匹配转发

Spring Cloud Gateway提供了请求路径变量方式匹配转发,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Path=/article/{articleId}

在上面配置中{articleId}是一个路径变量,可以是任意值,匹配/article/1/article/abc等,测试如下所示:

~ curl http://localhost:9090/article/1            // 匹配
~ curl http://localhost:9090/article/abc        // 匹配
~ curl http://localhost:9090/article/1/1        // 不匹配

请求IP 方式匹配转发

Spring Cloud Gateway可以限制允许访问接口的客户端IP地址,配置后只对指定IP地址的客户端进行请求转发,配置如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - RemoteAddr=192.168.1.56/24

在上面我们配置了192.168.1.56/24,其中192.168.1.56是客户端的IP地址,而24则是子网掩码。

组合示例

相同的Predicate也可以配置多个,请求的转发是必须满足所有的Predicate后才可以进行路由转发,组合使用示例如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: blog
          uri: http://blog.xx.com
          predicates:
            - Query=author, hengboy
            - Query=leo
            - Method=GET
            - Cookie=hengboy, leo
            - Header=X-Request-Id, \d+
            - RemoteAddr=192.168.1.56/24

总结

本章节讲解了Spring Cloud Gateway的相关谓词、断言基本使用方式,GateWay内部提供了很多种灵活的路由转发规则,在同一个路由内存在多个Predicate时,同时满足规则后请求才会被路由转发。

参考:
Spring cloud网关gateway进行websocket路由转发规则配置过程

https://www.jb51.net/article/280022.htm

到此这篇关于Spring cloud Gateway 详解及相关配置的文章就介绍到这了,更多相关Spring cloud Gateway配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringcloudGateway简介及相关配置方法

本文链接: https://www.lsjlt.com/news/203077.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringcloudGateway简介及相关配置方法
    目录Spring Cloud Gateway 的核心功能:1、路由 Route:2、断言 Predicate:3、过滤器 filter:4、Predicate 断言条件(转发规则)介...
    99+
    2023-05-14
    Spring cloud Gateway配置 Spring cloud Gateway
  • SpringCloud2020.0.x版UnderTow AccessLog相关配置简介
    目录01.accesslog相关配置02.日志文件rotate目前只能按照日期03.access占位符总结 本系列代码地址:https://github.com/HashZhang/...
    99+
    2024-04-02
  • J2EE简介以及配置方式
    本篇内容主要讲解“J2EE简介以及配置方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“J2EE简介以及配置方式”吧!  1、介绍  本文介绍J2EE环境的配置,所有涉及的文件都在J2EE安装目...
    99+
    2023-06-03
  • 查看MySQL配置文件路径及相关配置的方法
    查看MySQL配置文件路径及相关配置的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!(1)关于配置文件路径有时候,我发...
    99+
    2024-04-02
  • Spring Security的相关配置方法及功能实现
    本篇内容介绍了“Spring Security的相关配置方法及功能实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够...
    99+
    2024-04-02
  • Nginx+PHP配置相关进程的简要介绍有哪些
    这篇文章给大家介绍Nginx+PHP配置相关进程的简要介绍有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Nginx+PHP配置有很多的技术应用技巧,网管员在学习的时候都需要注意相...
    99+
    2024-04-02
  • 【MongoDB】3.0 配置文件相关介绍
    概述:在启动mongod和mongos时可以通过配置文件来启动控制实例。该配置文件包含的设置同等于mongod和mongos命令选项。使用配置文件管理mongod和mongos更容易,特别是对于大规模部署。...
    99+
    2024-04-02
  • SpringCloudGateway的熔断限流配置实现方法
    目录简介断路器限流总结简介 Spring Cloud Gateway是一个强大的开源工具,可以让开发人员轻松构建API和微服务。但是,与任何分布式系统一样,流量峰值或服务故障可能导致...
    99+
    2023-05-17
    SpringCloud Gateway熔断限流 SpringCloud熔断限流配置
  • Springcloud Gateway相关配置方法是什么
    这篇“Springcloud Gateway相关配置方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spr...
    99+
    2023-07-05
  • Linux安装Golang及相关环境配置的方法是什么
    这篇“Linux安装Golang及相关环境配置的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux安装Gol...
    99+
    2023-07-05
  • 介绍golang的%用法及相关知识
    在Go语言中,我们经常会用到%来进行格式化输出操作,%用法非常灵活,下面我们就来介绍一下golang的%用法及相关知识。基本用法:%用法最基本的形式就是用它将变量替换为指定的格式。例如下面代码将i替换为%d,%d表示输出变量i为十进制整数。...
    99+
    2023-05-14
  • ubuntu虚拟机上网方式及相关配置的方法有哪些
    本篇内容主要讲解“ubuntu虚拟机上网方式及相关配置的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ubuntu虚拟机上网方式及相关配置的方法有哪些”吧!一 Nat方式(虚拟机和主机...
    99+
    2023-06-13
  • SpringcloudConfig配置中心使用与相关介绍
    目录Springcloud Config什么是springcloud Configconfig服务端的配置使用config客户端的相关问题config客户端的配置使用动态刷新问题co...
    99+
    2024-04-02
  • 快速学会Dubbo的配置环境及相关配置
    目录1. Dubbo相关概念1.1 自动服务发现工作原理2. 启动文件2.1 zookeeper-3.4.11\bin\zkServer.cmd2.2 zookeeper-3.4.1...
    99+
    2024-04-02
  • h3c做nqa的相关配置及作用
    H3C的nqa作用主要是用来做主备路由使用,保障线路通常。 一、组网需求:Server可以通过两台路由器到达对端 线路保证冗余及断线自动切换 二、实际配置nqanqa主要分三个步骤1、配置nqa检测。2、配置track与nqa的关联。3、所...
    99+
    2023-01-31
    作用 h3c nqa
  • Linux安装Golang及相关环境配置
    Linux系统下,安装Golang并配置环境变量非常简单。本文将介绍如何在Linux系统中安装Golang及相关环境配置。一、下载Golang打开官网golang.org,进入“Downloads”页面。选择相应的版本,选择完毕后,即可下载...
    99+
    2023-05-14
    linux go语言 Golang
  • 华为---PPP协议简介及示例配置
    PPP协议简介         PPP是Point-to-Point Protocol的简称,中文翻译为点到点协议。与以太网协议一样,PPP也是一个数据链路层协议。以太网协议定义了以太帧的格式,PPP协议也定义了自己的帧格式,这种格式的帧称...
    99+
    2023-10-24
    网络
  • vscode以及Anaconda安装以及相关环境配置
    前言 相信很多的小伙伴和我一样初步涉入深度学习领域,那么对于小萌新来说,该选择什么样的方案去运行我们学习或者是下载好的项目呢?最常见的选择方案无非就是两种,一种是python搭配vscode/pycharm,这种方式不值得推荐,理由待会再说...
    99+
    2023-09-10
    python vscode
  • PHP日期相关函数的介绍及用法
    这篇文章主要介绍“PHP日期相关函数的介绍及用法”,在日常操作中,相信很多人在PHP日期相关函数的介绍及用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP日期相关函数的介绍及用法”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • CentOS下常见的系统服务以及相关的关闭方法介绍
    这篇文章主要介绍“CentOS下常见的系统服务以及相关的关闭方法介绍”,在日常操作中,相信很多人在CentOS下常见的系统服务以及相关的关闭方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CentOS下...
    99+
    2023-06-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作