当前位置: 首页 > news >正文

SpringCloudGateway — 网关路由

Spring Cloud Gateway 是 Spring 提供的一个高效、灵活的 API 网关解决方案,基于 Spring 5、Spring Boot 2 和 Project Reactor,具有高并发和低延迟的特点。它用于在微服务架构中对外提供统一的入口,处理请求的路由、过滤、负载均衡等功能。

由于每个微服务都有不同的地址或端口,入口不同,前后端联调会发现一些问题:

  • 请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦

  • 前端无法调用nacos,无法实时更新服务列表

官网:https://spring.io/projects/spring-cloud-gateway#learn

1. 网关简介

顾明思议,网关就是络的口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验

现在,微服务网关就起到同样的作用。前端请求不能直接访问微服务,而是要请求网关:

  • 网关可以做安全控制,也就是登录身份校验,校验通过才放行

  • 通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去

2. Spring Cloud Gateway基本概念

Spring Cloud Gateway 的核心概念包括 Route(路由)、Predicate(断言)和 Filter(过滤器)。

  • Route(路由):Route 是 Gateway 的基本构建单元。每个 Route 都有一个唯一的 ID、一个匹配规则(Predicate)和一个目标 URL(URI)。

  • Predicate(断言):用于判断请求是否匹配当前路由规则。例如,可以根据请求路径、请求方法、请求头等信息进行匹配。

  • Filter(过滤器):用于在请求或响应中进行处理。过滤器可以用于权限认证、请求修改、响应修改等。

3. Spring Cloud Gateway 的优势

  • 路由控制:能够将请求转发到不同的微服务。

  • 请求过滤:提供强大的过滤机制,可以对请求进行验证、修改等处理。

  • 负载均衡:支持与 Spring Cloud LoadBalancer 集成,提供自动负载均衡。

  • 限流和熔断:支持对请求进行限流和熔断,保障服务的稳定性。

4. 快速入门

4.1 创建项目

由于网关本身也是一个独立的微服务,因此也需要创建一个独立的微服务项目开发功能。

4.2 引入依赖

        <!--网关--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--nacos discovery--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--负载均衡--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

4.3 配置路由

Spring Cloud Gateway 支持两种方式配置路由:基于配置文件(application.yaml)配置基于 Java 代码配置

4.2.1 基于配置文件的路由配置

application.yaml 中可以定义 Gateway 的路由规则。下面是一个示例配置:

server:port: 8080 # 配置网关服务的启动端口为8080spring:application:name: gateway # 指定应用名称为 "gateway"cloud:nacos:server-addr: 192.168.1.101:8848 # Nacos服务器地址,用于服务注册与发现gateway:routes: # 配置网关路由- id: item # 路由规则的唯一ID,用于标识此路由规则uri: lb://item-service # 指定路由的目标服务地址,这里使用负载均衡 (lb://) 前缀,表示从Nacos注册中心拉取 "item-service" 服务的实例predicates: # 路由断言,定义规则,决定哪些请求可以匹配到该路由- Path=/items/**,/search/** # 路径断言,表示匹配请求路径以 "/items/" 或 "/search/" 开头的请求,符合则路由到 item-service- id: cart # 路由规则的唯一IDuri: lb://cart-service # 指定目标服务为 "cart-service",同样通过负载均衡从注册中心获取实例predicates:- Path=/carts/** # 路径断言,匹配以 "/carts/" 开头的请求,将其路由到 "cart-service"- id: user # 路由规则的唯一IDuri: lb://user-service # 指定目标服务为 "user-service"predicates:- Path=/users/**,/addresses/** # 路径断言,匹配以 "/users/" 或 "/addresses/" 开头的请求,将其路由到 "user-service"- id: trade # 路由规则的唯一IDuri: lb://trade-service # 指定目标服务为 "trade-service"predicates:- Path=/orders/** # 路径断言,匹配以 "/orders/" 开头的请求,将其路由到 "trade-service"- id: pay # 路由规则的唯一IDuri: lb://pay-service # 指定目标服务为 "pay-service"predicates:- Path=/pay-orders/** # 路径断言,匹配以 "/pay-orders/" 开头的请求,将其路由到 "pay-service"
  • id:路由的唯一标识。

  • uri:目标服务的地址。如果注册中心集成了负载均衡,可以使用 lb://service-name 的形式来配置服务。

  • predicates:断言规则,用于匹配请求。这里使用 Path 来匹配请求路径,/user/** 表示所有以 /user/ 开头的请求都将匹配该路由。

4.2.2 路由过滤讲解

路由规则的定义语法如下:

spring:cloud:gateway:routes:- id: itemuri: lb://item-servicepredicates:- Path=/items/**,/search/**

4.2.3 断言配置讲解

Spring Cloud Gateway 提供了多种断言来匹配请求。常用的断言包括:

  • Path 路径匹配:匹配请求路径。例如,Path=/user/** 匹配所有以 /user/ 开头的路径。

  • Method 请求方法:匹配请求方法。例如,Method=GET 匹配所有 GET 请求。

  • Header 请求头:匹配请求头。例如,Header=X-Request-Id 匹配包含 X-Request-Id 请求头的请求。

  • Query 参数匹配:匹配查询参数。例如,Query=token 匹配包含 token 参数的请求。

spring:cloud:gateway:routes:- id: header-routeuri: lb://service-namepredicates:- Header=X-Request-Id # 请求头断言- id: method-routeuri: lb://service-namepredicates:- Method=GET # 请求方法断言- id: query-routeuri: lb://service-namepredicates:- Query=token # 查询参数断言

相关文章:

SpringCloudGateway — 网关路由

Spring Cloud Gateway 是 Spring 提供的一个高效、灵活的 API 网关解决方案&#xff0c;基于 Spring 5、Spring Boot 2 和 Project Reactor&#xff0c;具有高并发和低延迟的特点。它用于在微服务架构中对外提供统一的入口&#xff0c;处理请求的路由、过滤、负载均衡等功能。 …...

docker pull 拉取镜像失败,使用Docker离线包

1、登录并注册Github&#xff0c;然后在Github中搜索并打开“wukongdaily/DockerTarBuilder” 项目&#xff0c;在该项目主页点击“Fork”。 然后点 “Create Fork”&#xff0c;将项目创建到自己的Github主页。 2、接着在自己创建过来的这个项目中点击“Actions” 3、然后…...

轻松理解操作系统 - 轻松了解 inode 是如何管理文件的

Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此&#xff0c;学习Linux 系统相关知识在后端开发等岗位中变得越来越重要&#xff0c;甚至可以说是必不可少的。 因为它的广泛应用&#xff0c;所以在程序员的日常工作和面试中&#xff0c;它都是经常出现的。它的开源特…...

go中Println和Printf的区别

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 go中Println和Printf的区别 package mainimport ( "fmt" )//TIP To run your code, right-click the c…...

C++现代教程七之模块

优点 编译时间减少&#xff1a;模块消除了重复解析和编译头文件的需要&#xff0c;从而显著减少了编译时间。特别是在大型项目中&#xff0c;这一点尤为重要。更好的封装性&#xff1a;模块允许更严格的封装&#xff0c;可以明确地控制哪些符号对外可见。这有助于减少命名冲突和…...

AVLTree

1.AVL树的概念 二叉搜索树虽然可以提高查找的效率&#xff0c;但是如果数据有序或者接近有序&#xff0c;二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。为了解决该问题&#xff0c;于是就有了AVLTree。即当向二叉搜索树中插入…...

Java面向对象 C语言字符串常量

1. &#xff08;1&#xff09;. package liujiawei;public class Phone {String brand;double price;public void call(){System.out.println("手机打电话");}public void play(){System.out.println("手机打游戏");} } public class phonetest {public…...

SpringBoot+Thymeleaf电商系统

> 这是一个基于SpringBootThymeleafBootstrap实现的简单电商系统。 > 实现了用户浏览、添加购物车、商品管理等功能&#xff0c;并支持响应式布局。 > 本项目适合JAVA初学者作为入门学习项目 一、部分界面演示 二、技术栈 技术栈中文描述Spring Boot快速开发框架…...

了解数据库并发产生的问题

在数据库管理系统中&#xff0c;并发控制是一个至关重要的方面。随着多个用户或进程同时访问和修改数据库中的数据&#xff0c;如果没有适当的并发控制机制&#xff0c;就可能导致数据不一致、丢失更新、脏读、不可重复读和幻读等问题。在单用户系统中&#xff0c;数据库操作是…...

openstack之guardian介绍与实例创建过程

运行特征 采集模块&#xff1a;扩展Ceilometer&#xff0c;采集存储网、业务网连通性、nova目录是否可读写&#xff1b; 收集模块&#xff1a;将采集到的数据存储到数据库中&#xff1b; 分析模块&#xff1a;根据采集的结果&#xff0c;分析各节点状态&#xff0c;并进行反向检…...

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大 时间&#xff1a;2023年 机构:北京邮电大学 发表在&#xff1a;IEEE TRANSACTIONS ON MULTIMEDIA, VOL. 25, 2023 代码源码地址&#xff1a; pytorch版本&#xff1a;https://github.com/dyh…...

SAP ABAP开发学习——RFC

目录 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接口系统 RFC的通信模式 RFC版本 RFC调用方式 Web Service接口 SAP创建Web Service示例 远程目标的维护 创建远程目标 外部系统访问设置 RFC的调用 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接…...

Elasticsearch里的索引index是什么概念?(ChatGPT回答)

在 Elasticsearch&#xff08;ES&#xff09;中&#xff0c;索引&#xff08;Index&#xff09; 是一种数据结构&#xff0c;用来存储、组织和管理文档数据。它可以理解为数据库中的一张表&#xff0c;但有一些关键的不同之处。索引是 Elasticsearch 全文搜索引擎的核心概念之一…...

安全性测试

安全性测试评估系统在面对各种安全威胁时的防护能力和安全性的过程。以下是安全性测试的一些主要方面和方法&#xff1a; 1. 身份验证和授权测试 测试目标 确保系统能够正确验证用户的身份&#xff0c;并根据用户的权限授予相应的访问权限。测试方法 弱密码测试&#xff1a;尝…...

ComfyUI和Photoshop相结合,PS内实现:文生图,图生图,高清放大,局部重绘,面部修复,设计师福音

本文主要介绍&#xff1a;ComfyUI和Photoshop相结合&#xff0c;一个平台实现&#xff1a;图像生成&#xff0c;放大&#xff0c;局部重绘&#xff0c;面部修复&#xff0c;实时绘画 简直是设计师的福音。 主要包括&#xff1a; Photoshop 的安装以及插件的安装 Creative Cl…...

使用 map 和 reduce 提取对象数组中的 id 并组成新数组

在开发过程中&#xff0c;经常需要对 API 返回的数据进行处理&#xff0c;例如从对象数组中提取某些字段&#xff0c;并将它们组成新的数组。这里我们将介绍如何通过 JavaScript 的 map 和 reduce 方法来完成这一需求&#xff0c;并深入比较这两者的用法与适用场景。 需求&…...

Zero-Shot Relational Learning for Multimodal Knowledge Graphs

摘要 关系学习是知识表示领域&#xff0c;特别是知识图补全&#xff08;KGC&#xff09;领域的一项重要任务。虽然传统单模态环境下的关系学习已经得到了广泛的研究&#xff0c;但在多模态KGC环境下探索关系学习提出了不同的挑战和机遇。其中一个主要挑战是在没有任何相关训练…...

AUTOSAR COM 模块的主要功能导读以及示例

AUTOSAR COM 模块的主要功能 AUTOSAR COM 模块在车载系统中用于管理通信的中间层&#xff0c;主要功能包括: 信号传输与接收&#xff1a; • 提供信号打包和解包功能&#xff0c;将信号数据打包成协议数据单元&#xff08;I-PDU&#xff09;以便传输&#xff0c;或从接收到的…...

VMware下Centos7虚拟机数据盘/data目录(非lvm)不停机热扩容实操

实操环境 VMware&#xff1a;7.0 虚拟机&#xff1a;Centos7 &#xff08;TEST-K8S-Node01&#xff09; 扩容目录&#xff1a;/data &#xff08;20G>>30G&#xff09; 前置操作 注意事项&#xff1a;如果有条件的话&#xff0c;建议先做个主机的全量备份&#xff08;…...

易盾增强版滑块识别/易盾识别/滑块识别/增强版滑块识别/易盾滑块本地识别

易盾增强版滑块识别 计算思路如下&#xff1a; 滑动条拖动距离传入 restrict 算法处理得到 初次值 J J * 率值0.309375 得到滑块偏移量。 滑块的旋转角度滑块偏移量*attrs 所以滑块偏移量滑块的旋转角度/attrs 通过滑块偏移量 求出 滑动条拖动距离 # 应用高斯模糊warped_…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...