Spring Cloud 之 Gateway详解

大家好,我是升仔

前言

在微服务架构中,网关扮演着至关重要的角色。它不仅是服务与外界交流的门户,还负责路由、过滤和安全等重要功能。Spring Cloud Gateway作为Zuul的继任者,凭借其更高的性能和灵活的配置方式,成为了现代微服务架构的首选网关解决方案。在本文中,将深入探讨Spring Cloud Gateway的关键特性,包括路由、过滤器、断言、安全性和限流机制。

替代Zuul的新网关

为什么选择Spring Cloud Gateway

  1. 性能优越:Gateway基于WebFlux框架,使用非阻塞API,性能相比Zuul有显著提升。
  2. 灵活配置:支持编程式和声明式两种配置方式,易于适应不同场景的需求。
  3. 功能丰富:提供了更多内置的过滤器和断言,满足复杂的路由需求。

核心组件

  • 路由器(Router):负责将请求路由到相应的微服务。
  • 过滤器(Filter):在请求发送前或后执行特定的逻辑。
  • 断言(Predicate):用于匹配HTTP请求的某些特定条件。

路由、过滤器和断言

路由配置

路由是Gateway的核心功能,它定义了外部请求如何转发到不同的微服务。例如:

@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {return builder.routes().route(p -> p.path("/get").filters(f -> f.addRequestHeader("Hello", "World")).uri("http://httpbin.org")).build();
}

这段代码定义了一个简单的路由规则:当请求路径是/get时,添加一个请求头Hello: World,然后将请求转发到http://httpbin.org

过滤器使用

过滤器允许在请求被路由前或后执行一些操作。如上例所示,.filters(f -> f.addRequestHeader("Hello", "World"))就是一个简单的过滤器。

断言的作用

断言用于判断请求是否符合某些条件,只有符合条件的请求才会被路由。例如:.path("/get")就是一个路径匹配断言。

网关安全和限流

安全配置

Spring Cloud Gateway可以与Spring Security结合,实现网关层面的安全控制。例如,可以通过配置认证和授权规则来保护API。

@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {http.authorizeExchange().pathMatchers("/anything/**").authenticated().anyExchange().permitAll().and().csrf().disable();return http.build();
}

这段代码配置了一个简单的安全规则:路径匹配/anything/**的请求需要进行身份验证,其他请求则无需验证。

限流机制

限流是网关的另一个重要功能,用于防止服务被过量请求压垮。Gateway提供了多种限流策略,例如基于请求的数量或者请求者的IP地址。

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route(r -> r.path("/throttle").filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(redisRateLimiter()))).uri("http://httpbin.org")).build();
}

这段代码定义了一个限流规则:对于路径/throttle的请求,通过redisRateLimiter()方法提供的限流策略进行处理。

结语

Spring Cloud Gateway不仅是Zuul的优秀替代品,更是现代微服务架构中不可或缺的组成部分。它通过高效的路由、灵活的过滤器和精确的断言,结合了强大的安全和限流机制,为微服务提供了坚实的网关支持。随着云原生技术的不断发展,Spring Cloud Gateway将继续发挥其重要作用,助力企业构建高效、安全的微服务架构。

最后说一句(求关注,求赞,别白嫖)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注非常感激

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

26. 删除有序数组中的重复项()-双指针

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你…

qemu 单步调试linux driver

一、背景 qemu单步调试arm64 linux kernel-CSDN博客介绍了如何单步调试kernel, 但是我们经常写一些测试driver, driver的部分如何调试? 二、环境准备 调试driver 就需要准备一个简单的driver, 这里用最简单的hello world来演示如何调试&am…

java日志框架总结(三 、Log4j日志框架)

一、简介 Log4j ( Logger For Java ) , Java 日志的记录包。 官方网站 。Log4j 是 Apache 的一个开源项目, 为Java提供了日志记录功能。能够让程序员非常方便的记录日志, 并且提供了多种适配方式,能满足各种需求。 使用Log4j 只需要导入一个…

算法每日一题: 最大合金数 | 二分

大家好,我是星恒,今天给大家带来的是一道比较正常的二分题目 题目:leetcode 2861假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用,并且你可以使用 k 台机器来制…

sql总结(高阶用法)

最近在做账单统计的需求,需要写较多的sql,也用到了很多以前没有用过的sql用法,通过本篇文章进行总结。 1.SUM() 和 CASE WHEN… SUM(CASE WHEN change_type -1 THEN total_amount ELSE 0 END) AS totalExpenditure这是一个典型的用法&#…

【设计模式】腾讯面经:原型模式怎么理解?

什么是原型模式? 设计模式是编程世界的基石,其中原型模式无疑是一种常用而又高效的创建对象的手段。那么,什么是原型模式呢?又该如何去实现它? 在软件工程中,原型模式是一种创建型设计模式。我们可以这样…

Python可视化库:数据呈现的多彩世界

Python可视化库:数据呈现的多彩世界 一、Matplotlib二、Seaborn三、Plotly四、Bokeh五、pyecharts六、总结 在当今数据驱动的时代,将复杂的数据集转换成易于理解的图形和图表变得越来越重要。Python作为一种流行的编程语言,其强大的可视化库为…

2024獬豸杯完整Writeup

文章目录 手机手机基本信息- 1、IOS手机备份包是什么时候开始备份的。(标准格式:2024-01-20.12:12:12)手机基本信息- 2、请分析,该手机共下载了几款即时通讯工具。(标准格式:阿拉伯数字)手机基本信息- 3、手…

Zerosync:构建基于STARK的Bitcoin证明系统

1. 引言 前序博客: BitcoinSTARK: ZeroSync & Khepri Robin Linus、Tino Steffens、Lukas George 等人成立了一个名为 ZeroSync 协会(ZeroSync Association)的瑞士非营利组织,该组织将牵头开发比特币证明系统。ZeroSync 于…

共享自助空间打破传统束缚,创新消费体验

共享自助空间是指将传统的办公空间、工作空间、社交空间等资源进行共享,为个体或小型团体提供灵活的使用服务和自主管理的空间。这种模式使得个人可以在一个共享的环境中独立办公、工作或社交,并能享受到共享资源和服务的便利,比如共享茶室、…

【数据分析】numpy基础第四天

文章目录 1. 前天教程与巩固1.1. 第一天1.2. 第二天1.3. 第三天 2. 问题解析2.1. 第一天1. 如何创建Numpy数组2. 如何获取第3个元素3. 如何获取包含第1、2、3行的切片 2.2. 第二天4. 如何将一个有10个元素的一维数组,转变为10行1列的二维数组5. 如何在垂直或者水平上…

超温报警器电路设计方案汇总

超温报警器电路设计方案(一) 该超温报警电路由温度采集电路、继电器控制电路、延时电路、秒脉冲信号发生器、计数译码电路、数显电路、报警电路共同构成。下面来详细介绍一下各部分电路的功能。 温度采集电路 温度采集电路由负温度系数的热敏电阻RW、R…

CodeComplete-ReadingNote

《代码大全》CODECOMPLETE2 apollowangjunbo/Code-Complete-reading-note: 《代码大全》读书笔记 (github.com) 第一章 欢迎进入软件构建的世界 软件开发过程中各种不同的活动: 定义问题(problem definition)需求分析(requireme…

PDF标准详解(一)——PDF文档结构

已经很久没有写博客记录自己学到的一些东西了。但是在过去一年的时间中自己确实又学到了一些东西。一直攒着没有系统化成一篇篇的文章,所以今年的博客打算也是以去年学到的一系列内容为主。通过之前Vim系列教程的启发,我发现还是写一些系列文章对自己的帮…

Day01-变量和数据类型课后练习-参考答案

文章目录 1、输出你最想说的一句话!2、定义所有基本数据类型的变量和字符串变量3、用合适类型的变量存储个人信息并输出4、定义圆周率PI5、简答题 1、输出你最想说的一句话! 编写步骤: 定义类 Homework1,例如:Homewo…

04基于人工智能大模型的智慧教育应用

04基于人工智能大模型的智慧教育应用 赛题关键:AIGC教育的应用 一:确定应用方向 选取待解决的教育领域核心问题,确定产生怎么样的产品,基于大模型解决什么样的问题 可参考实例一: 高级版作业帮 基于大模型启发式…

Day48 动态规划part09 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III

Day48 动态规划part09 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III 198. 打家劫舍 class Solution { public:int rob(vector<int>& nums) {vector<int> dp(nums.size()); //考虑下标i的最大偷窃金额dp[i]if(nums.size()0) return 0;if(nums.size()1) …

测试C#调用OpenCvSharp和IronOcr从摄像头中识别文字

学习了基于OpenCvSharp获取摄像头数据&#xff0c;同时学习了基于IronOcr的文字识别用法&#xff0c;将这两者结合即是从摄像头中识别文字。本文测试C#调用OpenCvSharp和IronOcr从摄像头中识别文字的基本用法、。   新版Winform项目&#xff0c;在Nuget包管理器中添加以下程序…

案例分析技巧-软件工程

一、考试情况 需求分析&#xff08;※※※※&#xff09;面向对象设计&#xff08;※※&#xff09; 二、结构化需求分析 数据流图 数据流图的平衡原则 数据流图的答题技巧 利用数据平衡原则&#xff0c;比如顶层图的输入输出应与0层图一致补充实体 人物角色&#xff1a;客户、…

告别繁琐!轻松创建旧版Spring Boot项目!

推荐文章 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;一&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;二&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;三&#xff09; 给软件行业带来了春天—…