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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习 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 集成的知识点作为高级扩展知识。

相关文章
|
5天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
30天前
|
Cloud Native API
微服务引擎 MSE 及云原生 API 网关 2024 年 9 月产品动态
微服务引擎 MSE 及云原生 API 网关 2024 年 9 月产品动态。
|
1月前
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
72 2
|
1月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
【10月更文挑战第1天】探索微服务架构中的API网关模式
92 2
|
3天前
|
负载均衡 监控 API
dotnet微服务之API网关Ocelot
Ocelot 是一个基于 .NET 的 API 网关,适用于微服务架构。本文介绍了如何创建一个 Web API 项目并使用 Ocelot 进行 API 请求路由、负载均衡等。通过配置 `ocelot.json` 和修改 `Program.cs`,实现对 `GoodApi` 和 `OrderApi` 两个项目的路由管理。最终,通过访问 `https://localhost:7122/good/Hello` 和 `https://localhost:7122/order/Hello` 验证配置成功。
13 1
dotnet微服务之API网关Ocelot
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
6天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
11天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
13天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
34 3
|
13天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
31 2