Spring Cloud讲解之Spring Cloud Gateway

Spring Cloud Gateway 11种断言工厂 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spring Cloud Gateway中内置了很多路由断言工厂类。不同的断言工厂类针对HTTP请求的不同属性。多个断言工厂类可以使用逻辑“and”进行组合使用。官方文档:POM引入: 阅读详情

前言

Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到api,并为它们提供横切关注点,如:安全性、监控/指标和弹性。
集成Sping Cloud Gateway需要Spring 5.0、Spring Boot2.0及以上版本。

特性

● 能够匹配任何请求属性的路由
● 断言和过滤特殊路由
● 断路器集成
● Spring Cloud DiscoveryClient集成
● 容易编写断言和过滤器
● 请求速率限制
● 地址重写

如何集成Spring Cloud Gateway?

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

如果集成了gateway但是不想开启,可使用配置将其关掉:spring.cloud.gateway.enabled=false;使用说明:

  • Spring Cloud Gateway需要构建在Spring Boot2.x、Spring WebFlux、Project Reactor之上。
  • Spring Cloud Gateway需要Spring Boot和Spring Webflux提供的Netty运行时。它不能在传统的Servlet容器中工作,也不能作为WAR构建。

术语

  • Route:网关的基本组成部分,它由一个ID、一个目标URI、一个断言集合、一个过滤器集合定义,如果一个聚合断言为true则匹配路由。
  • Predicate:一个Java8提供的新特性,它允许匹配任何来自HTTP的请求、比如请求头、请求参数。
  • Filter:这些是使用特定工厂构造的GatewayFilter实例,通过filter,你可以修改发送到下游的请求或者响应信息。

工作原理

在这里插入图片描述

  • 客户端首先请求到Spring Cloud Gateway.
  • 如果网关处理程序映射确认这个请求能匹配到一个路由,则将该请求发送到Gateway Web Handler.
  • 这个处理器会通过一个特定的请求过滤链来运行本次请求.
  • 该过滤器链会在请求执行前后对请求或响应结果进行处理.

配置路由断言工厂和网管过滤器工厂

Spring Cloud Gateway提供两种配置断言和过滤器方式:快捷配置和完全展开参数配置。大多数情况下会使用快捷方式。

快捷配置

可通过过滤器名称识别快捷配置,后面跟着=号,参数如果有多个,使用逗号隔开(,)。

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - Cookie=mycookie,mycookievalue

其中Cookie为路由,mycookie为要匹配的cookie名称,mycookievalue为需要匹配的值。

完全展开参数

完全展开的参数看起来更像是带有key/value的标准yaml配置。一般会有一个name的键和一个args的键,其中name代表当前路由名称,而arg键主要用于配置断言或过滤器的键值对的映射。

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - name: Cookie
          args:
            name: mycookie
            regexp: mycookievalue

路由断言工厂

Spring Cloud Gateway做为Spring WebFlux HandlerMapping基础设施的一部分,内置了许多断言工厂。所有断言都匹配不同HTTP请求的不同属性,可以使用逻辑或者语句组合多个断言工厂。

后置路由断言工厂

后置断言工厂接收一个日期参数(java ZonedDateTime),这个断言匹配在指定日期时间之后发生的请求。

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - After=2017-01-20T17:42:47.789-07:00[America/Denver]

前置路由断言工厂

前置断言工厂接收一个日期参数(java ZonedDateTime),这个断言匹配在指定日期时间之前发生的请求。

spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: https://example.org
        predicates:
        - Before=2017-01-20T17:42:47.789-07:00[America/Denver]

区间路由断言工厂

区间路由断言工厂接收两个参数,datetime1和datetime2,都是java ZonedDateTime对象。这个断言匹配在datetime1和datetime2之间发生的请求。其中,datetime2必须在datetime1之后。

spring:
  cloud:
    gateway:
      routes:
      - id: between_route
        uri: https://example.org
        predicates:
        - Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]

Cookie路由断言工厂

Cookie路由断言工厂接收两个参数,cookie名称和正则表达式。这个断言匹配具有指定名称的cookie,且cookie的值能满足正则表达式的匹配条件。

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://example.org
        predicates:
        - Cookie=chocolate, ch.p

该示例路由匹配cookie名称为chocolate,cookie值为ch.p的请求。

请求头路由断言工厂

该断言工厂接收两个参数,header和一个正则表达式。这个断言匹配具有指定名称的header,且header的值满足匹配表示式的请求。

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: https://example.org
        predicates:
        - Header=X-Request-Id, \d+

主机路由断言工厂

该断言工厂接收一个参数:主机名模式列表,该模式是ant风格的模式 , 作为分隔符。这个断言匹配能按照主机头匹配模式匹配到的请求。

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: https://example.org
        predicates:
        - Host=**.somehost.org,**.anotherhost.org

如果请求的主机头为www.somehost.org or beta.somehost.org or www.anotherhost.org,则此路由匹配。

方法路由断言工厂

该断言工厂接收一个方法参数,它是一个或多个参数:要匹配的HTTP方法。

spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: https://example.org
        predicates:
        - Method=GET,POST

该断言匹配一个GET或POST请求。

路径路由断言工厂

该断言工厂接收两个参数:Spring PathMatcher patterns列表和一个可选标志matchTrailingSlash(默认为true)。

spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: https://example.org
        predicates:
        - Path=/red/{segment},/blue/{segment}

如果请求路径为/red/1 or /red/1/ or /red/blue or /blue/green则此路由匹配。如果matchTrailingSlash参数设置为false则路由不匹配,因为关闭该参数以为不匹配后续/内容。

查询路由断言工厂

该断言工厂接受两个参数:一个必须参数param和一个可选参数regex。

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: https://example.org
        predicates:
        - Query=green
        

如果请求中包含green查询参数,则匹配成功。

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: https://example.org
        predicates:
        - Query=red, gree.

该示例中,如果请求参数中key包含red,value包含green或greet则该请求将会被匹配。

远程地址路由断言工厂

这个RemoteAddr路由断言工厂接收一个列表,例如192.168.0.1/16(其中192.168.0.1是IP地址,16是子网掩码)。

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: https://example.org
        predicates:
        - RemoteAddr=192.168.1.1/24

如果发送请求的远程地址为192.168.1.10,则该路由将会被匹配。

网关拦截器工厂

AddRequestHeader GatewayFilter工厂

AddRequestHander网关拦截器工厂接收一个参数name和value参数。

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_header_route
        uri: https://example.org
        filters:
        - AddRequestHeader=X-Request-red, blue

这个列表将会添加一个X-Request-red:blue请求头为所有拦截到的请求。

AddRequestParameter网关过滤器工厂

AddRequestParameter网关过滤器工厂接收一个name和value参数。

spring:
  cloud:
    gateway:
      routes:
      - id: add_request_parameter_route
        uri: https://example.org
        filters:
        - AddRequestParameter=red, blue

该示例中将会添加red=blue参数到下游请求的查询字符串中。

AddResponseHeader网关过滤器工厂

AddResponseHeader网关过滤器工厂接收一个name和一个value参数。

spring:
  cloud:
    gateway:
      routes:
      - id: add_response_header_route
        uri: https://example.org
        filters:
        - AddResponseHeader=X-Response-Red, Blue

该过滤器将会为所有匹配到的下游响应结果添加X-Response-Foo:Bar响应头;同样,该过滤器也支持路由参数,对请求及响应进行处理:

spring:
  cloud:
    gateway:
      routes:
      - id: add_response_header_route
        uri: https://example.org
        predicates:
        - Host: {segment}.myhost.org
        filters:
        - AddResponseHeader=foo, bar-{segment}

DedupeResponseHeader网关过滤器工厂

DedupeResponseHeader 网关过滤器工厂接收一个name参数和一个可选的strategy参数。name能够包含一个用逗号分割的header name列表

spring:
  cloud:
    gateway:
      routes:
      - id: dedupe_response_header_route
        uri: https://example.org
        filters:
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

Spring Cloud 断路器网关过滤器工厂

Spring Cloud断路器网关过滤器工厂用于将Spring Cloud 断路器API包装在网关路由中。

spring:
  cloud:
    gateway:
      routes:
      - id: circuitbreaker_route
        uri: https://example.org
        filters:
        - CircuitBreaker=myCircuitBreaker

FallBackHeaders网关过滤器工厂

FallBackHeaders工厂允许在转发到外部应用程序中的fallbackUri的请求头中添加Spring Cloud断路器执行异常细节。

spring:
  cloud:
    gateway:
      routes:
      - id: ingredients
        uri: lb://ingredients
        predicates:
        - Path=//ingredients/**
        filters:
        - name: CircuitBreaker
          args:
            name: fetchIngredients
            fallbackUri: forward:/fallback
      - id: ingredients-fallback
        uri: http://localhost:9994
        predicates:
        - Path=/fallback
        filters:
        - name: FallbackHeaders
          args:
            executionExceptionTypeHeaderName: Test-Header

深入探索Spring Cloud Gateway:微服务网关的最佳实践 API网关是一个反向路由,屏蔽内部细节,为调用者提供统一入口,接收所有调用者请求,通过路由机制转发到服务实例。API网关是一组“过滤器Filter”集合,可以实现一系列与核心业务无关的横切面功能,如安全认证、限流熔断、日志监控。 阅读详情

相关推荐

Spring Cloud Gateway深入探究

文章目录Spring Cloud Gateway介绍Spring Cloud Gateway 配置MavenYmlJava ConfigSpring Cloud Gateway使用RoutePredicateFilterSpring Cloud Gateway 工作原理Spring Cloud Gateway 总结相关文档 Spring Cloud Gateway介绍 废话不多说,看官方文档的介绍...

Nico专栏 6910

Spring Cloud Gateway 断言完全讲解

内置的断言可能无法满足业务需求。检查用户是否是VIP会员根据请求中的特定参数进行复杂逻辑判断整合数据库查询或缓存检查@Component // ⚠️ 关键!必须注册为Spring Bean// 传入配置类为什么要继承这个类?

qq_31532983的博客 830

【SpringCloud】9、Spring Cloud Gateway跨域配置

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对 JavaScript 施加的安全限制。

JACKAL 3万+

Spring Cloud Gateway讲解

摘要:Spring Cloud Gateway是Spring官方开发的微服务API网关,基于Spring 5+Spring Boot 2+WebFlux技术栈,用于替代Zuul。它作为微服务架构的统一入口,解决了多服务地址记忆、统一认证限流、后端服务变动及监控等问题。核心功能包括服务路由、负载均衡、限流熔断、统一认证等。其工作流程包含请求接收、路由匹配、过滤器链执行和非阻塞转发等步骤。相比Zuul,Gateway采用非阻塞模型,性能更优且支持WebSocket。开发只需4步:引入依赖、创建启动类、配置路由和

qq_39156659的博客 221

Spring Cloud(18)——gateway

Spring Cloud Gateway Spring Cloud Gateway是Spring提供的API网关层,可以通过它代理请求,然后转发到真正的目标地址上。使用Spring Cloud Gateway需要加上spring-cloud-starter-gateway和spring-boot-starter-webflux依赖。 <dependency> <groupId...

Elim的博客 1962

计算机组成原理实验二 运算器组成实验

事实上,ALU的设计是在全加器的基础上,对全加器功能的扩展来实现符合要求的多种算术/逻辑运算的功能。为了实现多种功能的运算,An、Bn数据是不能直接与全加器相连接的,它们受到功能变量F3—F1的制约,因此,可由An、Bn数据和功能变量F3-F1组合成新的函数Xn 、Yn,然后,再将Xn 、Yn和下一位进位Cn-1通过全加器进行全加运算以实现所需的运算功能。AC寄存器可用来存储ALU的输入以实现两个操作数的运算操作,也可以用来存储来自ALU的结果,以将这些结果反馈给ALU以进行更多的处理。

qq_63574533的博客 1444

网关(Spring Cloud Gateway)讲解

主要功能前端通过访问一个固定的端口,可以通过Spring Cloud Gateway来访问到微服务里面的不同的端口里面的,可以通过如下的图片理解一下;结合 Nacos 服务发现和 Sentinel 限流,可构建高可用、安全的 API 网关层。

FAQEW的博客 925

脑机接口最新发展动态报告 (2024-2025)

脑机接口动态

高山 4091

细到不能再细的 Spring Cloud Gateway 原理分析(内含多张图片讲解)

通过绘制多图讲解 Spring Cloud Gateway 的原理。层层递进!! Spring Cloud Gateway 使用了 Spring WebFlux 非阻塞网络框架,底层网络通信默认使用了高性能非阻塞的 Netty ,解决了 Spring Cloud Zuul 因为阻塞的线程模型带来的性能下降的问题。

nimo10050的博客 1万+

从零配置EtherCAT IGH主站:手把手教你处理内核版本与实时性优化的那些坑

本文详细指导如何从零配置EtherCAT IGH主站,涵盖内核版本适配、实时性优化及常见问题解决方案。通过精确匹配内核头文件、应用实时补丁和优化网卡驱动,帮助开发者实现微秒级响应,适用于工业自动化、机器人控制等高精度场景。

weixin_30790841的博客 377

用App Inventor做个蓝牙温湿度计,手机自动连Arduino,5分钟搞定硬件数据上屏

本文详细介绍了如何使用App Inventor和Arduino快速搭建一个蓝牙温湿度监测系统,实现手机自动连接并显示实时数据。通过图形化编程和硬件组装指南,零代码基础的用户也能在5分钟内完成硬件数据上屏,适用于智能家居、教学演示等多种场景。

weixin_30813225的博客 165

视频教程-spring cloud gateway源码级讲解-Java

spring cloud gateway源码级讲解 读过源码,写过框架,希望...

weixin_33291396的博客 958

工业质检终极方案:C#上位机融合 YOLO+Blob分析(一站式尺寸测量+缺陷检测)

本次上位机界面严格遵循工业现场操作规范简洁、直观、按钮大、文字清晰、参数可视化调节,操作人员为车间工人/质检员,无需复杂操作,所有功能一目了然。所有控件均为WinForms原生控件,拖拽即可完成布局,无任何自定义控件,开发效率拉满,核心布局永久复用本次实战完成的C#上位机+YOLO+Blob融合质检方案,是工业规则零件全尺寸质检的终极落地方案,完美解决了单一检测方案的所有短板,具备以下不可替代的工业价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1339

Spring Cloud Gateway 服务网关讲解

网关(Gateway)是在计算机网络中用于连接不同网络的设备或软件。它充当了网络中不同协议,不同网络或不同服务之间的中转站,负责在网络层或应用层转发和处理数据。在互联网应用中,网关通常指的是API网关(API Gateway)。API网关位于服务提供方和服务消费方之间,作为一个入口点,对外暴露服务的API接口,并提供了一系列的功能和特性,包括:路由与负载均衡:API网关根据请求的URL路径、请求头或其他的标识信息,将请求路由到相应的后端服务。

weixin_44991599的博客 191

外骨骼机器人(五):步态分析之正常步态

研究病理步态之前,需要了解正常步态,作为判断标准。但是需要记住两个问题:1.“正常”因人而异,性别、年龄、身体情况都需要考虑在内,因此,需要对不同的个体选择合适的正常标准;2.即使病人的步态与正常步态有某种不同,这也不能说明这是不可取的,也不能说明应该把它变成“正常”步态。许多步态异常是对病人的一些问题的一种补偿,尽管异常,但它们仍然是有用的。步态周期的定义是连续为两次发生重复行走事件之间的时间间隔。尽管可以选择任何事件来定义步态周期,但通常使用一只脚接触地面的瞬间(“初始接触”)是方便的。

行者无疆的博客 1982

新版CKA2020-2020-10-13-真题试卷

2020年10月13日 真题 新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole that only allows the creation of the following resource types: Depl

随笔记录-分享&记忆 2389

万字 讲解Spring Cloud Gateway 2.0,面向未来的技术,了解一下?

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。 本文将从知识拓扑讲起,谈一下api网关的功能,以及spring cloud gateway的使用方法。文章很长,可以先过一下目录。 一、知识拓扑 (使用和原理) 二、网关的作用 三、Predicate,路由匹配 四、Filter,过滤器编写 五、自定义过滤器 六、常见问题 为什么很多人觉得spring cloud gateway难用?因为它的背后用的是webflux,涉及到响应式编程,而不是传统的过程式编程。 我们把.

Java技术江湖 1345

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1305

Spring Cloud Gateway重试机制

前言 重试,我相信大家并不陌生。在我们调用Http接口的时候,总会因为某种原因调用失败,这个时候我们可以通过重试的方式,来重新请求接口。 生活中这样的事例很多,比如打电话,对方正在通话中啊,信号不好啊等等原因,你总会打不通,当你第一次没打通之后,你会打第二次,第三次…第四次就通了。 重试也要注意应用场景,读数据的接口比较适合重试的场景,写数据的接口就需要注意接口的幂等性了。还有就是重试次数如...

u010889990的专栏 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Cloud Gateway 自定义过滤器:原理讲解与代码演示

Spring Cloud Gateway 的核心处理流程基于 WebFlux 响应式编程模型,过滤器(Filter)是处理请求和响应的关键组件。全局过滤器(Global Filter):作用于所有路由。网关过滤器(Gateway Filter):通过配置绑定到特定路由。自定义过滤器通过实现或接口,在请求转发前后执行逻辑(如鉴权、日志、限流等)。// 执行顺序(值越小优先级越高)

gfdasdax的博客 312

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

spring cloud gateway之服务注册与发现

点击上方“方志朋”,选择“置顶或者星标”你的关注意义重大!在之前的文章介绍了Spring Cloud Gateway的Predict(断言)、Filter(过滤器),大家对Spring C...

方志朋的博客 137

网关 Spring Cloud Gateway 自定义路由谓词工厂,深入讲解Java

当我们必须以编程方式创建复杂对象时,Fluent API是一种流行的设计选择。在我们的例子中,我们在*@Bean_中定义路由,该_@Bean_使用_RouteLocatorBuilder_和我们的自定义谓词工厂创建一个_RouteLocator*对象 :@Bean.build();注意我们在每个路由中如何使用两个不同的_Config_配置。在第一种情况下,第一个参数为_true_,因此当我们收到黄金客户的请求时,谓词也将评估为_true_。至于第二条路线,我们在构造函数中传递false。

m0_61943758的博客 1172

Spring Cloud Gateway

API网关也是一个服务,通常是后端服务的唯一入口. 它的定义类似于设计模式中的Facade模式(门面模式).也就是说,API网关就是整个微服务架构的门面,所有外部客户端访问,都需要经过它来进行调度和过滤网关的核心功能权限控制: 作为微服务的入口,对用户进行权限校验,如果拦截失败则进行拦截动态路由: 一切请求先经过网关,但网关不处理业务,只是通过某种规则,把请求转发到某个微服务负载均衡:当路由的目标有多个的时候,需要负载均衡。

m0_60963435的博客 1711
上一篇: GraphRAG详解
下一篇: DeepSeek-R1训练细节解读
longfei.li
博客等级 码龄12年 171粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值