【Spring开发】SpringCloud服务端基础框架第9篇:3.Gateway服务网关【附代码文档】

举报
小帅说java 发表于 2025/10/10 14:50:51 2025/10/10
【摘要】 Docker实用篇 0.学习目标 1.初识Docker 1.2.Docker和虚拟机的区别 2.Docker的基本操作 2.1.镜像操作 2.1.3.案例1-拉取、查看镜像 2.1.5.练习 3.Dockerfile自定义镜像 3.3.构建Java项目 3.4.小结 4.Docker-Compose 4.3.部署微服务集群 4.3.1.compose文件 4.3.3.打包 设置

🏆🏆🏆教程全知识点简介:Docker实用篇 0.学习目标 1.初识Docker 1.2.Docker和虚拟机的区别 2.Docker的基本操作 2.1.镜像操作 2.1.3.案例1-拉取、查看镜像 2.1.5.练习 3.Dockerfile自定义镜像 3.3.构建Java项目 3.4.小结 4.Docker-Compose 4.3.部署微服务集群 4.3.1.compose文件 4.3.3.打包 设置docker镜像源 关闭 禁止开机启动防火墙 安装 修改权限 补全命令 RabbitMQ 1.初识MQ 1.1.同步和异步通讯 1.2.技术对比: 2.快速入门 2.2.RabbitMQ消息模型 2.3.导入Demo工程 2.4.入门案例 2.4.1.publisher实现 3.1.3.测试 3.2.WorkQueue 3.2.1.消息发送 3.2.4.能者多劳 3.3.发布/订阅 3.4.Fanout 3.4.1.声明队列和交换机 3.5.Direct 3.6.Topic 3.6.1.说明 SpringCloud01 1.认识微服务 1.1.单体架构 2.服务拆分和远程调用 2.1.服务拆分原则 2.3.实现远程调用案例 2.3.1.案例需求: 2.3.2.注册RestTemplate 3)启动多个user-service实 4.Ribbon负载均衡 4.1.负载均衡原理 4.2.源码跟踪 1)LoadBalancerIntercepor 3)负载均衡策略IRule 5.Nacos注册中心 5.1.认识和安装Nacos 5.2.服务注册到nacos 1)引入依赖 2)配置nacos地址 3)重启 5.3.服务分级存储模型 5.3.2.同集群优先的负载均衡 5.4.权重配置 Nacos安装指南 1.Windows安装 1.1.下载安装包 1.2.解压 1.3.端口配置 1.4.启动 1.5.访问 2.Linux安装 2.1.安装JDK 3.Gateway服务网关 3.1.为什么需要网关 3.3.断言工厂


📚📚仓库code.zip 👉直接-->:   https://gitee.com/xiaoshuai112/Backend/blob/master/Spring/SpringCloud服务端基础框架/note.md    🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

3.Gateway服务网关

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

3.1.为什么需要网关

Gateway网关是 服务的守门神,所有微服务的统一入口。

网关的核心功能特性

  • 请求路由
  • 权限控制
  • 限流

架构图:

权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。

[FreeMarker 文档]

路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。

限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。

在SpringCloud中网关的实现包括两种:

  • gateway
  • zuul

Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

3.2.gateway快速入门

下面, 就演示下网关的基本路由功能。基本步骤如下:

  1. 创建SpringBoot工程gateway,引入网关依赖
  2. 编写启动类
  3. 编写基础配置和路由规则
  4. 启动网关服务进行测试

[SBT 文档]

1)创建gateway服务,引入依赖

创建服务:

引入依赖:

<!--网关-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2)编写启动类

package cn.itcast.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

[WildFly 文档]

3)编写基础配置和路由规则

创建application.yml文件,内容如下:

server:
  port: 10010 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes: # 网关路由配置
        - id: user-service # 路由id,自定义,只要唯一即可
          # uri:  # 路由的目标地址 http就是固定地址
          uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求

将符合Path 规则的一切请求,都到 uri参数指定的地址。

本例中, 将 /user/**开头的请求,到lb://userservice,lb是负载均衡,根据服务名拉取服务列表,实现负载均衡。

4)重启测试

重启网关,访问

5)网关路由的流程图

整个访问的流程如下:

总结:

网关搭建步骤:

  1. 创建项目,引入nacos服务发现和gateway依赖

  2. 配置application.yml,包括服务基本信息、nacos地址、路由

路由配置包括:

  1. 路由id:路由的唯一标示

  2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡

  3. 路由断言(predicates):判断路由的规则,

  4. 路由过滤器(filters):对请求或响应做处理

接下来,就重点来学习路由断言和路由过滤器的详细知识

3.3.断言工厂

在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件

例如Path=/user/**是按照路径匹配,这个规则是由

org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来

处理的,像这样的断言工厂在SpringCloudGateway还有十几个:

名称 说明 示例

🚀✨ (未完待续)项目系列下一章

📚下一篇 将进入更精彩的环节! 🔔 记得收藏 & 关注,第一时间获取更新! 🍅 一起见证整个系列逐步成型的全过程。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。