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

【Spring Cloud】一个例程快速了解网关Gateway的使用

         Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式,并为它们提供一些网关基本功能,例如:安全,监控/指标和弹性。

         下面我们分别以两个例子说明:

一. 版本说明

Spring Boot版本:2.2.5.RELEASE

Spring Cloud版本:Hoxton.SR3

如无特殊说明,Spring Cloud的所有例程都将采用上面的版本。

二. 网关的使用

建议:在本课程开始前,如果不懂Eureka创建的详细步骤,建议先看【一个实例学会 Spring Cloud 的注册中心 Eureka 的用法】,没有看过也没关系,按照下面步骤开始吧:

1. 新建父项目

1.1 如果你没有父项目(如果已经完成注册中心的实例肯定有父项目啦),请使用简单Maven创建父项目:

1.2. 创建好后,打开pom.xml文件,加入如下代码:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.cherry</groupId><artifactId>springcloudproject</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>14</java.version><spring-cloud.version>Hoxton.SR3</spring-cloud.version><springboot.version>2.2.5.RELEASE</springboot.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

 1.3. 删除src文件夹

2. 创建网关子项目

2.1 在父项目下面,使用Spring Initializr新建网关子项目gateway,选择依赖Gateway,简略贴图如下:

建好后,修改pom.xml文件,修改后文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>springcloudproject</artifactId><groupId>com.cherry</groupId><version>1.0-SNAPSHOT</version><!-- <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.6.RELEASE</version><relativePath/> &lt;!&ndash; lookup parent from repository &ndash;&gt;--></parent><groupId>com.cherry</groupId><artifactId>gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway</name><description>Demo project for Spring Boot</description><!--<properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.SR3</spring-cloud.version></properties>--><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2.2 修改配置文件application.properties后缀为yml(即文件名改为application.yml),对网关进行配置

这里我们将csdn博客作为服务提供方

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833

2.3 执行run,springboot内置Tomcat启动,端口9001

2.4 浏览器输入地址http://localhost:9001/huanzi833

3. 关闭网关

如果希望网关不可用,可在application.yml加入下面设置:

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833enabled: false

浏览器访问,结果如下:

 4. 通过时间匹配路由规则

注意:属性文件修改后,请自行重启应用,后面就不每次重复说明了

4.1 时间After路由匹配

在After设置的时间之后路由生效,如:在2020年1月1日之后的请求都转发到我的博客,这个时间之前的不能转发

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833- After=2020-01-01T00:00:00+08:00[Asia/Shanghai]enabled: true

4.2  时间Before路由匹配

在Before设置的时间之前的路由生效,如:在2021年1月1日之前的请求都转发到我的博客,这个时间之后的不能转发

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833- After=2020-01-01T00:00:00+08:00[Asia/Shanghai]- Before=Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]enabled: true

4.3  时间Between路由匹配

在Between设置的时间之间的路由生效,如:在2020年1月1日至2020年10月1日之间的请求都转发到我的博客,这个时间以外的不能转发,通常Between与After及Before不会一起使用,以免重复设置。

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833
#            - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
#            - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]- Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]enabled: true

 4.4 Cookie路由匹配

对于Cookie,predicates可以接收两个参数,一个是 Cookie name ,一个是正则表达式,路由规则会通过获取对应的 Cookie name 值和正则表达式去匹配,如果匹配上就会执行路由,如果没有匹配上则不执行。

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833
#            - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
#            - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]- Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]- Cookie=uid, cherry #通过cookie进行路由规则的匹配enabled: true

 使用Cookie路由匹配,我们可以进入cmd进行测试,cmd中输入如下语句:

 4.6 Header路由匹配

类似于Cookie路由匹配,也是2个参数,一个参数名称,一个正则表达式,如果匹配上就会执行路由,如果没有匹配上则不执行。

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833
#            - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
#            - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]- Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]- Cookie=uid, cherry #通过cookie进行路由规则的匹配- Header=X-Request-Id, \d+ #Header路由规则enabled: true

 进入cmd进行测试,cmd中输入如下语句:

4.7  Host路由匹配

以下配置通过主机地址进行匹配,如www.csdn.net,或者www.baidu.com,或者blog.csdn.net等地址

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833
#            - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
#            - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]- Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]- Cookie=uid, cherry #通过cookie进行路由规则的匹配- Header=X-Request-Id, \d+ #Header路由规则- Host=**.csdn.net, **.baidu.com #Host路由规则enabled: true

进入cmd进行测试,cmd中输入如下语句:

4.8 Method匹配路由

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833
#            - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
#            - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]- Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]- Cookie=uid, cherry #通过cookie进行路由规则的匹配- Header=X-Request-Id, \d+ #Header路由规则- Host=**.csdn.net, **.baidu.com #Host路由规则- Method=GET, POST #Method路由规则enabled: true

 进入cmd进行Get测试,cmd中输入如下语句:

进入cmd进行POST测试,cmd中输入如下语句: (注:如果服务提供者controller中路径使用GetMapping,调用时这里使用-X POST会出404)

4.9 IP地址匹配

predicate 也支持通过设置某个 ip 区间号段的请求进行路由,例如 192.168.1.1/24 (其中 192.168.1.1 是 IP 地址,24 是子网掩码,这里的24表示子网掩码是255.255.255.0)。可以将此地址设置为本机的 ip 地址进行测试。

server:port: 9001spring:application:name: gatewaycloud:gateway:routes:- id: gateway-serviceuri: https://blog.csdn.netpredicates:- Path=/huanzi833
#            - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]
#            - Before=2021-01-01T00:00:00+08:00[Asia/Shanghai]- Between=2020-01-01T00:00:00+08:00[Asia/Shanghai], 2020-10-01T00:00:00+08:00[Asia/Shanghai]- Cookie=uid, cherry #通过cookie进行路由规则的匹配- Header=X-Request-Id, \d+ #Header路由规则- Host=**.csdn.net, **.baidu.com #Host路由规则- Method=GET, POST #Method路由规则- RemoteAddr=192.168.1.1/24enabled: true

4.10 路径路由匹配/参数匹配/权重匹配将在下面与注册中心的集成中完成。

三. 下面开始将使网关服务化,并与注册中心、服务者、消费者进行关联

1. 首先创建服务中心Eureka,代码如下:

相关文章:

【Spring Cloud】一个例程快速了解网关Gateway的使用

Spring Cloud Gateway提供了一个在Spring生态系统之上构建的API网关&#xff0c;包括&#xff1a;Spring 5&#xff0c;Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的路由方式&#xff0c;并为它们提供一些网关基本功能&#xff0c;例如&…...

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页&#xff0c;多媒体视频类微信小程序ui前端模板下载。包含&#xff1a;视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码...

数据库存储引擎

MySQL体系结构 存储引擎 -- 查询建表语句 show create table account; -- 查询引擎 show engines; InnoDB 特点 DML操作遵循ACID模型,支持事务 行级锁&#xff0c;提高并发访问性能支持外键约束 文件 xxx.ibd&#xff1a;xxx代表的是表名,innoDB引擎的每张表都会对应这样…...

【单片机毕业设计选题24049】-基于STM32单片机的智能手表设计

系统功能: 显示时间&#xff0c;温湿度&#xff0c;体温信息&#xff0c;播放音乐及控制红外小夜灯&#xff0c;通过蓝牙模块连接手机APP。 系统上电后OLED显示“欢迎使用智能手表系统请稍后”&#xff0c;两秒后进入正常页面显示 第一行显示获取到的当前时间 第二行显示获…...

利用面向AWS的Thales Sovereign解决方案保护AI之旅

亚马逊网络服务(AWS)是全球最大的云服务提供商。众所周知&#xff0c;他们致力于提供工具、解决方案和最佳实践&#xff0c;使其客户能够安全地利用AWS上的生成式人工智能 (GenAI) 工作负载。组织正在迅速使用GenAI为企业带来更高的生产力和创造力。在GenAI的几乎所有用途中&am…...

学习笔记——交通安全分析13

目录 前言 当天学习笔记整理 5城市主干道交通安全分析 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 #本期内容接上一期12笔记 当天学习笔记整理 5城市主干道交…...

PHP-实例-文件上传

1 需求 2 basename 在 PHP 中&#xff0c;basename() 函数用于返回路径中的文件名部分。如果路径中包含了文件扩展名&#xff0c;则该函数也会返回它。如果路径的结尾有斜杠&#xff08;/&#xff09;或反斜杠&#xff08;\&#xff09;&#xff0c;则 basename() 函数会返回空…...

LeetCode刷题之HOT100之完全平方数

2024 7/7 转眼间就到周日啦&#xff01;昨天下午开组会&#xff0c;开了三个半小时。如坐针毡&#xff0c;会后跑了个步、洗了个澡、洗了衣服、躺床上看了会《罪与罚》&#xff0c;睡着了。早上起来&#xff0c;去拿我昨晚充电的车&#xff0c;当我看到车没有停在昨天的位置&am…...

【SpringCloud应用框架】Nacos集群架构说明

第六章 Spring Cloud Alibaba Nacos之集群架构说明 文章目录 前言一、Nacos支持三种部署模式二、集群部署说明三、预备环境 前言 到目前为止&#xff0c;已经完成了对Nacos的一些基本使用和配置&#xff0c;接下来还需要了解一个非常重要的点&#xff0c;就是Nacos的集群相关的…...

JS进阶-作用域

学习目标&#xff1a; 掌握作用域 学习内容&#xff1a; 作用域局部作用域全局作用域作用域链JS垃圾回收机制拓展-JS垃圾回收机制-算法说明闭包变量提升 作用域&#xff1a; 作用域规定了变量能够被访问的"范围"&#xff0c;离开了这个"范围"变量便不能被…...

stm32 使用GPIO模拟串口发送

在STM32微控制器上实现模拟串口输出&#xff08;也称为软件串口或比特邦定&#xff08;Bit-Banging&#xff09;串口&#xff09;&#xff0c;主要是因为硬件上的UART资源有限或者为了特定需求而需要更多的串口通信接口。模拟串口意味着使用GPIO引脚模拟UART的TX&#xff08;发…...

数据的统计探针:SKlearn中的统计分析方法

数据的统计探针&#xff1a;SKlearn中的统计分析方法 在数据科学领域&#xff0c;统计分析是理解和解释数据的关键工具。Scikit-learn&#xff08;简称sklearn&#xff09;&#xff0c;作为Python中一个功能强大的机器学习库&#xff0c;提供了多种方法来进行数据的统计分析。…...

实例演示Kafka-Stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…...

【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey

1 介绍 年份&#xff1a;2024 作者&#xff1a;刘子耀&#xff0c;陈晨&#xff0c;南洋理工大学 期刊&#xff1a; 未发表 引用量&#xff1a;6 Liu Z, Ye H, Chen C, et al. Threats, attacks, and defenses in machine unlearning: A survey[J]. arXiv preprint arXiv:2403…...

Python数据分析实战,运输车辆驾驶行为分析,案例教程编程实例课程详解

引言 运输车辆的安全驾驶行为分析是确保道路安全、提高运输效率的重要环节。随着数据采集技术的发展和数据分析工具的普及,利用Python进行数据分析已成为这一领域的重要工具。本文将详细介绍如何使用Python进行运输车辆驾驶行为分析,涵盖数据采集、数据预处理、数据分析及结果…...

网络安全法对等级保护中的权利和义务有何规范?

在数字时代的交响乐章中&#xff0c;网络安全法与等级保护共同编织了一曲关于权利与义务的和谐旋律。《中华人民共和国网络安全法》作为我国网络安全领域的基本法&#xff0c;对等级保护提出了明确的规范&#xff0c;旨在构建一个安全、有序的网络空间。本文将深入解析网络安全…...

苹果清理软件:让你的设备焕然一新

随着时间的推移&#xff0c;无论是Mac电脑还是iOS设备&#xff0c;都可能会因为积累的垃圾文件、缓存、未使用的应用和其他冗余数据而开始表现出性能下降。这不仅会占用宝贵的存储空间&#xff0c;还可能影响设备的响应速度和电池寿命。幸运的是&#xff0c;有多种苹果清理软件…...

vue前端通过sessionStorage缓存字典

正常来说&#xff0c;一个vue项目前端需要用到的一些翻译字典对象保存方式一般有多重&#xff0c; 新建js文件方式保存通过vuex方式保存通过sessionStorage保存通过localStorage保存 正常以上几点的保存方式是够用了。 但是&#xff0c;当有字典不能以文件方式保存并且字典量…...

React Redux使用@reduxjs/toolkit的hooks

关于redux的学习过程需要几个官网&#xff0c;有redux官网&#xff0c;React Redux官网和Redux Toolkit的官网。 其中后者的中文没有找到&#xff0c;不过其中的使用在React Redux官网的快速入门中有介绍。 现在一般不使用connect借接口了。 对于借助Redux Toolkit的React Redu…...

Rejetto HFS 服务器存在严重漏洞受到攻击

AhnLab 报告称 &#xff0c;黑客正在针对旧版本的 Rejetto HTTP 文件服务器 (HFS) 注入恶意软件和加密货币挖矿程序。 然而&#xff0c;由于存在错误&#xff0c; Rejetto 警告用户不要使用 2.3 至 2.4 版本。 2.3m 版本在个人、小型团队、教育机构和测试网络文件共享的开发…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...