3.9 Spring Cloud Gateway 微服务新网关实战| 学习笔记

简介: 快速学习 3.9 Spring Cloud Gateway 微服务新网关实战。

开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 3.9 Spring Cloud Gateway 微服务新网关实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/60/detail/1102


3.9 Spring Cloud Gateway 微服务新网关实战


内容介绍

一、前言

二、Spring Cloud Gateway 网关

三、实战 Spring Cloud Gateway

四、总结

 

一、前言

在之前的课程中讲解了 Spring Cloud 微服务架构开发实战 zuul 网关,本节课程讲解 Spring Cloud 另外一个比较重要的网关技术组件 Gateway,以及讲解 zuul 与 Gateway 的不同,如何使用 Gateway 实战,集成项目。

 

二、Spring Cloud Gateway 网关

Spring Cloud Gateway Netflix zuul 命名方式不同。Spring Cloud 的框架不断进行迭代更新,除了官方贡献,社区也贡献了很多技术组件。Spring Cloud Gateway 是官方出的。之前讲解的很多技术组件都是 Netflix 公司所出的。Netflix 公司贡献了 Spring Cloud 早期微服务的许多核心组件,对于整个 Java 的微服务发展做出了巨大的贡献。但是 Spring Cloud 官方公司希望进行云原生企业化,包括走收费的路线。项目大部分是靠业余时间进行维护开发,官方公司自己开发了网关。该网关设计是全新的,底层也不是基于1.0Spring 模式,它运用的是 Reactive 响应式编程模式,在吞吐量上做了一些提升,这是它很大的优势。Java 支持优秀的编程模型,比如异步式,响应式这种编程模式,底层是 web-flash NetApp 也都有使用。

1、Spring Cloud Gateway 新特性

(1)基于 Spring 5,Project Reactor 和 Spring Boot 2.0 构建。

(2)、能够匹配任何请求路由。

(3)、特定路由专用 Predicate 谓词和过滤器 Filter 特。

(4)、集成 Hystrix 断路器。

(5)、集成 Spring Cloud DiscoveryClient

(6)、易于编写谓词和过滤器

(7)、请求速率限制

(8)、路径重写

(9)、非阻塞 API,响应式 API,高并发

使用 Spring Cloud Gateway 必须是 Spring Framework 在5.0版本以上,Spring Boot 是2.0及2.0以上的版本。其中包含了一些编程语法,which 主要做自定义代码的扩展,比如过滤器,或者路由。

Gateway 能够集成 Hystrix 断路器组件,也有 DiscoveryClient 贡献的服务发现的客户端等。很多技术组件都存在,只不过官方在后续更新中不再默认集成。Zuul 中已经集成 Hystrix 断路器,包括服务发现,重要的不同就是响应式变成异步,以及加上非阻塞 API,对后期高并发吞吐量有一个改善,但也不是绝对的,需要做测试才能体现技术的差异。

2、Spring Cloud Gateway 网关架构

image.png

观察结构有很多相似点,Gateway 有请求处理,之前的是 SpriteGateway 也有 Filter 概念,过滤。它本身是网关服务器接入请求后,做请求的路由和转发。

对于优秀的开发师不仅能够开发优化,还要会底层的关键的架构设计扩展。

3、Gateway 核心组件

核心和之前是一样的,包含有 which 扩展,过滤器等。Which 可以做定制代码的开发攻入next中也有路由组件,允许扩展。扩展功能可以在配置文件中扩展,也可以通过代码方。代码方可以借助 java的 Which 语法对接函数式编程这样的风格进行代码扩展。

(1)Route 是网关的基础元素,由 ID、目标 URI 断言、过滤器组成。当请求到达网关时,由 Gateway Handler Mapping 通过断言进行路由匹配(Mapping) ,当断言为真时,匹配到路由。

(2)、Predicate 是 Java 8 Function Predicate。输入类型是 Spring Framework ServerWebExchange。匹配 HTTP 请求,例如请求头或者请求参数。简单来说它是匹配条件做路由。

(3)、Filter 是 Gateway 中的过滤器,在请求发出前后进行处理。

4、Route Predicate Factories 模式

After Route Predicate Factory

Before Route Predicate Factory

Between Route Predicate

FactoryCookie Route PredicateFactory

Header Route Predicate Factory

Host Route Predicate Factory

Method Route Predicate Factory

Path Route Predicate Factory

Query Route Predicate Factory

RemoteAddr Route Predicate Factory

路由扩展 which 接口很多,前后环绕模式都可以。有基于 COOKIE 的模式,基于 HEADER 的模式,基于 HOST 的模式,基于方法的模式,基于 PATH 的模式,基于 Query 参数的模式,基于远程地址的模式都可以进行拦截扩展。

 

三、实战 Spring Cloud Gateway

1、Spring Cloud Gateway 具体操作

做一个 Spring Cloud Gateway 项目需要加入必要的依赖,已经具备了必要的包,加入 Gateway 需要的技术组件,修改配置。和 zuul的开发过程不一样,有部分参数方式不一样。

基于 Spring Cloud Gateway2 的版本需要启用路由才可以,而zuul 是修改完配置后直接添加注解启动就可以了。如果不修改配置,请求就无法进行转发。

直接创建项目,选择 Spring Boot Dev Tools和Eureka Discovery clie。搜索 Gateway 就可以生成项目。核心是要修改配置。

//依赖包

<dependency>

<groupld>org.springframework.cloud</groupld>

<artifactld>spring-cloud-starter-

gateway</artifactld>

</dependency>

//配置文件,可以启用 gateway 也可以关闭。这里等于 false 是关闭 gateway

spring.cloud.gateway.enabled=false

//配置路由,加入自己的基于配置文件私有的转发策略,私有的路由策略。这里 Gateway 和 zuul 的配置文件相像,Gateway 有自己的名字,和注册中心进行挂接。这里的注册中心是 eureka

spring.application. name=Gateway

//服务器端口

eureka.instance.hostname=localhost

server.port=10000

eureka.client.serviceUrl.defaultZone=http://localhost:8761/ eureka/

//打开查询

eureka.client.fetch-registry=true

eureka.client.register-with-eureka=true

//gateway 必须显式启用,否则请求转发不过来。

spring.cloud.gateway.enabled=true

spring.cloud.gateway.discovery.locator.enabled=true

spring.cloud.gateway.discovery.locator.lower-case-service-id=true

这里注册中心和 Gateway 已经上线了。

挂接微服务和客户端,在 gateway 中调用 localhost:10000/order-microservice/hello,可以启动。

再上线一个微服务,检查这个微服务调用是否有路由的功能,测试一号服务器和二号服务器。两台微服务全部上线后,直接基于8001调用,结果是没有进行转发的。再调用 8002,显示可以调用出来。

Spring Cloud Gateway 本身已经获取了最新的服务列表,注册中心拉到了可用的两台服务实例,且默认支持轮询。这是最基本的对接,对接要注意依赖包和配置,配置必须启用,同时要注意版本差的问题。最核心的是依赖包,Gateway 的项目中必须有 Gateway 的依赖。Zuul是Netflix开发的,Spring Cloud 官方开发的。Zuul1.0基于传统的阻塞API, Gateway 是基于响应式 API。理论上,Gateway 的吞吐量更高一点,但并不是绝对的,低并发情况下,Gateway Zuul 的快慢不确定。

2、自定义路由

默认规则路由已经可以满足需求,如果需要特殊的路由规则,可以自定义路由。举例如下:

//请求地址中包含163,将它实际转发给 http://www.163.com 

return builder.routes()

.route(r -> r.path("/163/**" ).uri("http: / / www.163.com""))

.build();

这就是简单的自定义路由的规则,使用的语法是 lambda 语法,也可以是 which 语法。自定义扩展基本上都采用这种模式。也有其它的方法,比如基于字符串模式匹配规则都可以使用。这里是举的例子,在实际开发中可以根据项目需要自定义。

//配置文件定义,路径改为 path=/hi/**,就可以转发到实际后端的服务上。

spring.cloud.gatewayroutes[0].id= helloMicroservice

spring.cloud.gatewayroutes[0].uri=lb://helloMicroservice

spring.cloud.gatewayroutes[0].predicates[0]=path=/hi/**

zuul 也可以进行定制,但是默认设置就已经可以满足绝大多数项目的需求了。

 

四、总结

以上即是 Spring Cloud Gateway 网关的实践过程,要求把之前所做的项目和 Spring Cloud Gateway 集成起来,了解 Gateway 和 zuul 的区别,多掌握几种成熟的工具,在设计架构落地时有更多的方案,不会局限于一种,理解官方会推出 gateway 的原因。

下节课讲解面试题以及 Spring Cloud Netflix 集成的知识点作为高级扩展知识。

相关文章
|
11月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
473 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
11月前
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
237 0
|
11月前
|
消息中间件 Java 数据库
Spring 微服务中的数据一致性:最终一致性与强一致性
本文探讨了在Spring微服务中实现数据一致性的策略,重点分析了最终一致性和强一致性的定义、优缺点及适用场景。结合Spring Boot与Spring Cloud框架,介绍了如何根据业务需求选择合适的一致性模型,并提供了实现建议,帮助开发者在分布式系统中确保数据的可靠性与同步性。
647 0
|
10月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
1419 2
Spring Boot 3.x 微服务架构实战指南
|
10月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
11月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
697 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
11月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
621 1
|
11月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
10月前
|
缓存 JSON NoSQL
别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码
小富分享Spring Cloud Gateway内置30+过滤器,涵盖请求、响应、路径、安全等场景,无需重复造轮子。通过配置实现Header处理、限流、重试、熔断等功能,提升网关开发效率,避免代码冗余。
764 1
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
1756 69
利用Spring Cloud Gateway Predicate优化微服务路由策略