网关介绍
1.1 背景问题
在微服务架构中,我们通常借助 Eureka 或 Nacos 解决服务注册与发现问题,使用 Spring Cloud LoadBalancer 处理负载均衡,以及通过 OpenFeign 实现远程调用。然而,如果所有微服务的接口直接对外暴露,会带来显著的安全风险。
为了保证服务安全性,后端接口通常需要权限校验。但在微服务拆分后,原本单体应用中的单一模块变成了多个独立服务,导致我们需要在每个服务中重复实现相同的鉴权逻辑。一旦规则变更,就需要修改多个应用,增加了维护成本。
一个通用的解决方案是引入 API 网关。这就好比企业设立前台:随着部门增多,每个部门都核实身份效率低下;而由前台统一核验身份后,各部门即可信任通行。网关正是微服务架构中的'前台',负责统一调度与过滤。
1.2 什么是 API 网关
API 网关(Gateway)通常是后端服务的唯一入口,其设计模式类似于外观模式(Facade)。所有外部客户端的请求都必须经过它进行转发和过滤。

网关的核心功能包括:
- 权限控制:作为入口拦截非法请求。
- 动态路由:根据规则将请求转发至对应的微服务。
- 负载均衡:当目标服务有多个实例时分发流量。
- 限流:控制流量峰值,防止下游服务过载。
1.3 常见网关实现
业界成熟的网关方案较多,如 Nginx、Kong、Zuul 等。其中 Zuul 曾是 Spring Cloud Netflix 的核心组件,但自 2018 年起已停止新特性开发。
Spring Cloud Gateway 是 Spring Cloud 推出的全新网关项目,旨在替代 Zuul。它基于 Spring Boot 和 WebFlux 构建,性能表现优异。官方测试数据显示,其 RPS(每秒请求数)约为 Zuul 的 1.6 倍。
Spring Cloud Gateway 实战
2.1 快速上手
2.1.1 创建项目
新建一个标准的 Spring Boot 项目,命名为 gateway。
2.1.2 引入依赖
我们需要引入网关核心依赖、Nacos 服务发现依赖以及负载均衡依赖。
<!-- 网关核心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-loadbalancer



