Spring Cloud Gateway之路由配置

news/2024/9/19 4:50:00/ 标签: 前端, 服务器, 网络

Spring Cloud Gateway支持多种方式的路由配置,允许根据各种条件和需求来定义和控制请求的路由行为。以下是Spring Cloud Gateway中常用的路由配置选项和相关功能:

基本路由配置

路由的基本配置通常包括路由ID、目标URI、谓词(Predicates)和过滤器(Filters)。这是一个最基本的路由配置结构:

spring:cloud:gateway:routes:- id: example_routeuri: https://example.compredicates:- Path=/example/** filters:- AddRequestHeader=Example, Header
  • id: 路由的唯一标识符。
  • uri: 目标URI,表示请求将被转发到哪个服务或外部网站。
  • predicates: 路由谓词,用于定义哪些请求符合条件并会匹配此路由。
  • filters: 过滤器,用于在请求被路由到目标URI之前或响应返回客户端之前对请求或响应进行处理。

谓词(Predicates)

谓词用于定义路由的匹配条件。Spring Cloud Gateway支持多种谓词类型,它们基于Spring的java.util.function.Predicate。常用的谓词包括:

  • Path: 按照请求路径匹配。例如,Path=/example/**
  • Method: 按照HTTP方法匹配。例如,Method=GET
  • Header: 按照请求头匹配。例如,Header=X-Request-Id, \d+
  • Query: 按照请求参数匹配。例如,Query=foo, ba.
  • Cookie: 按照请求中的Cookie匹配。例如,Cookie=chocolate, choco.*
  • Host: 按照主机名匹配。例如,Host=**.example.com
spring:cloud:gateway:routes:- id: header_routeuri: https://example.compredicates:- Header=MyHeader, my-value

过滤器(Filters)

过滤器是Spring Cloud Gateway路由的重要组成部分,用于在请求或响应的生命周期中添加自定义处理逻辑。常用的过滤器包括:

  • AddRequestHeader: 添加请求头。
  • AddRequestParameter: 添加请求参数。
  • StripPrefix: 移除路径前缀。
  • RewritePath: 重写请求路径。
  • SetPath: 设置请求路径。
  • RedirectTo: 重定向请求。
  • Retry: 请求失败时重试。
  • RequestRateLimiter: 请求限流。
spring:cloud:gateway:routes:- id: rewrite_routeuri: https://example.compredicates:- Path=/oldpath/**filters:- RewritePath=/oldpath/(?<segment>.*), /newpath/${segment}

组合多个谓词

Spring Cloud Gateway支持使用多个谓词组合来匹配请求,所有谓词必须都满足时,路由才会生效。

spring:cloud:gateway:routes:- id: complex_routeuri: https://example.compredicates:- Path=/example/**- Method=GET- Header=MyHeader, my-value

在这个配置中,只有请求路径是/example/**、HTTP方法是GET,并且请求头MyHeader的值是my-value时,路由才会匹配。

全局过滤器

全局过滤器作用于所有路由,通常用于实现通用功能,如日志记录、身份认证、跨域处理等。

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;@Component
public class CustomGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {System.out.println("Global Pre Filter executed");return chain.filter(exchange).then(Mono.fromRunnable(() -> {System.out.println("Global Post Filter executed");}));}
}

动态路由

Spring Cloud Gateway支持动态路由配置,可以通过编程方式在运行时添加、修改或删除路由。这种方式适用于需要根据外部条件(如数据库配置、服务发现等)实时调整路由的场景。

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class GatewayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("path_route", r -> r.path("/example/**").uri("https://example.com")).build();}
}

总结

Spring Cloud Gateway提供了丰富且灵活的路由配置方式,可以通过谓词、过滤器、全局过滤器以及动态路由等功能满足各种复杂的路由需求。正确地配置和使用这些选项可以确保API网关在微服务架构中的高效、安全运行。


http://www.ppmy.cn/news/1520552.html

相关文章

VirtualBox Debian 自动安装脚本

概览 相较于原脚本&#xff08;安装目录/UnattendedTemplates/debian_pressed.cfg&#xff09;更新如下内容&#xff1a; 配置清华镜像源配置仅主机网卡&#xff08;后续只需添加仅主机网卡即可&#xff09;配置Root用户远程登录配置用户sudo组 脚本 debian_pressed.cfg ##…

基于layui实现简单的万智牌生命计数器页面

对照手机App“旅法师营地”的万智牌生命计数器窗口&#xff08;如下图所示&#xff09;&#xff0c;使用layui、jQuery等实现简单的万智牌生命计数器页面。   主要实现的功能如下&#xff1a;   1&#xff09;点击左右两侧的-1、1、-5、5区域更新左右两侧生命值&#xff1…

银河麒麟v10-sp3-x86系统安装k8s-1.30.4

X86-64和arm架构的区别 x86-64架构&#xff1a; 设计理念&#xff1a;x86-64架构起源于Intel的x86架构&#xff0c;并对其进行了64位扩展。这种架构的设计侧重于高性能和灵活性&#xff0c;适合处理复杂的计算任务。 性能特点&#xff1a;x86-64架构的处理器通常提供高性能的…

9 月 7-8 日,Rust China Conf 2024 来啦!

大会介绍 Rust China Conf 2024 由 Rust 中文社区发起主办、知名企业和开源组织联合协办&#xff0c;是年度国内规模最大并唯一的 Rust 线下大型会议&#xff0c;深受 Rust 中文社区开发者与相关企业的喜爱与推崇。自 2020 年起&#xff0c; RustChinaConf 大会已经连续举办四…

利用Spring Boot实现服务降级与熔断机制

利用Spring Boot实现服务降级与熔断机制 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在分布式系统中&#xff0c;服务降级和熔断是保证系统稳定性的重要机制。服务降级是指在系统负载过高或…

快速写一个自己的flutter应用(新手入门)

1、搭建开发环境 详细文档可以参考如下链接&#xff1a;跟着官方文档走就可以了。 1.3 搭建Flutter开发环境 | 《Flutter实战第二版》 (flutterchina.club) 开发 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 我的安装过程&#xff1a; 首先&…

ZooKeeper:浅谈ZooKeeper的Watch机制

ZooKeeper&#xff1a;浅谈对ZooKeeper的认识 一、ZooKeeper的Watch机制是什么 ZooKeeper是用来协调&#xff08;同步&#xff09;分布式进程的服务&#xff0c;提供了一个简单高性能的协调内核&#xff0c;用户可以在此之上构建更多复杂的分布式协调功能。 多个分布式进程通…

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求&#xff0c; 需要安装一个监控软件&#xff0c;对SpringBoot程序进行监控&#xff0c; 包括机器上cpu, 内存&#xff0c;jvm以及一些日志的统计。 这里需要介绍两款软件&#xff1a; prometheus 和 grafana prometheus: 中文名称&#xff0c; 普罗米…

[论文笔记]Dimensionality Reduction by Learning an Invariant Mapping

引言 今天带来一篇真正远古(2005年)论文的笔记,论文是Dimensionality Reduction by Learning an Invariant Mapping。 该论文中提出的对比损失(2.1节)可以用于训练嵌入模型。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 降维涉及将一…

LLM代码实现-Qwen(下载和调用)

基本介绍 Qwen 基础模型已经稳定训练了大规模高质量且多样化的数据&#xff0c;覆盖多语言&#xff08;当前以中文和英文为主&#xff09;&#xff0c;Qwen 目前有多个版本&#xff1a;1.8B、7B、14B、72B&#xff0c;同时还开源了 Qwen-VL、Qwen-Audio 两款多模态模型。阿里可…

力扣2503.矩阵查询可获得的最大分数

力扣2503.矩阵查询可获得的最大分数 离线算法 排序 小根堆 将query数组从小到大排序&#xff0c;用小根堆存每个单元格的值从小到大遍历query&#xff0c;如果堆顶元素小于query[i]&#xff0c;弹出&#xff0c;直到全部弹出&#xff0c;总弹出个数为答案 class Solution …

Vue3项目开发——新闻发布管理系统(五)

文章目录 七、登录&注册页面设计开发4、后端接口调用4.1 AXIOS请求工具封装4.2 创建 axios 实例①安装 axios② 封装 axios 模块4.3完成 axios 基本配置5 实现 注册功能5.1 创建接口调用js文件5.2 页面中调用注册方法6 实现 登录功能6.1 创建接口调用js文件6.2 页面中调用登…

【STM32开发】GPIO最全解析及应用实例

目录 【1】GPIO概述 GPIO的基本概念 GPIO的应用 【2】GPIO功能描述 1.IO功能框图 2.知识补充 3.功能详述 浮空输入 上拉输入 下拉输入 模拟输入 推挽输出 开漏输出 复用开漏输出和复用推挽输出 【3】GPIO常用寄存器 相关寄存器介绍 4个32位配置寄存器 2个32位数据寄存器 1个32位…

能大致讲一下Chat GPT的原理吗?

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 话题群精选了三位网友的回答&#xff0c;从不同的角度阐释了Chat GPT的原理。 第一位网友的回答&#xff1a; 不给你扯长篇大论&#…

Gateway的基本概念

1.Gateway概念介绍 1.1Gateway介绍 Gateway网络为微服务架构提供简单且统一的API路由管理&#xff0c;作为系统的统一入口。 Gateway可以为客户端提供统一的服务&#xff0c;例如认证、路由转发、防刷、流量控制、监控日志等。 Gateway是无状态的&#xff0c;不存放数据&…

spring boot 项目 跟 JavaScript 简单 websocket 使用

文章目录 websocket 简绍WebSocket 的优势包括&#xff1a;JavaScript 设置处理事件 Java 服务端设置导jar包创建WebSocket端点EnableWebSocketregisterWebSocketHandlers 实现WebSocket处理器afterConnectionEstablishedafterConnectionClosedhandleTextMessage 注销WebSocket…

C# 使用微软OFFICE库操作excel

C# 使用微软OFFICE库操作excel写入数据 using System; using Excel Microsoft.Office.Interop.Excel;namespace ExcelExample {class Program{static void Main(string[] args){// 创建Excel应用程序实例Excel.Application excelApp new Excel.Application();// 让Excel应用…

Python 读写 Excel 文件:创建、遍历、更新与样式处理

Excel 是广泛使用的电子表格软件&#xff0c;用于数据存储、分析和可视化。Python 通过第三方库如 openpyxl 和 pandas 提供了丰富的功能来读写 Excel 文件。本文将详细介绍如何使用 Python 进行 Excel 文件的创建、遍历、更新、删除以及样式处理等操作。 1. 安装必要的库 首…

【计算机网络】socket编程 --- 实现简易TCP网络程序

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【Pytorch实用教程】tqdm的作用:在循环中显示进度条

tqdm 是一个 Python 库,用于在循环中显示进度条。它能够为任何可迭代对象(例如列表、生成器、数据加载器等)添加一个可视化的进度条,使用户可以实时查看程序的执行进度。 在数据科学和机器学习领域,tqdm 经常用于显示训练和验证过程中的进度。例如,在训练神经网络时,由…