Spring Cloud Gateway 网关
微服务网关 Spring Cloud Gateway
Spring Cloud 在版本 2020.0.0 开始,去除了 Zuul 网关的使用,改用 Spring Cloud Gateway 作为网关。
Spring Cloud Gateway 基于 Spring WebFlux 框架实现,相对于 Zuul 来说,性能更高。
Spring Cloud Gateway 适用于许多不同的使用场景,包括但不限于:
- 微服务架构:在微服务架构中,API 网关是连接多个微服务的关键组件,它提供了统一的入口点,并可以处理跨服务的事务。
- 安全性要求高:当项目对安全性有高要求时,API 网关可以集中管理认证和授权,确保敏感数据受到保护。
- 负载均衡与高可用:需要负载均衡和高可用性的情况下,API 网关可以自动分发流量并处理服务的故障。
- 监控和日志:当需要监控和记录请求和响应时,API 网关提供了方便的工具来进行监控和故障排除。
本文讲述如何在 Spring Cloud 中使用 Nacos 作为注册中心,通过 Spring Cloud Gateway 实现 API 路由的功能。
启动 Nacos
由于需要使用 Nacos 作为注册中心,网关和微服务都注册到 Nacos服务上,因此,需要先启动 Nacos服务。
见上一篇:
启动 Gateway
添加POM
在 Spring Cloud 项目 GoboyCloud 基础上创建一个 Spring Boot 子项目,添加pom.xml 依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.cloud.goboy</groupId>
<artifactId>goboycloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>goboy-gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-gateway</name>
<description>Spring Cloud Gateway</description>
<packaging>jar</packaging>
<dependencies>
<!-- 引入nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--API网关Gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<finalName>${project.name}</finalName>
</configuration>
</plugin>
</plugins>
</build>
</project>
- spring-cloud-starter-alibaba-nacos-discovery:使用 Nacos 作为注册中心,需要连接上 Nacos。
- spring-cloud-starter-gateway:使用 Spring Cloud Gateway 作为网关。
添加YML
server:
port: 9090
spring:
application:
name: goboy-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:9001
gateway:
routes:
- id: nacos-provider
uri: lb://nacos-provider
predicates:
- Path=/provider/**
filters:
- StripPrefix=1
网关端口设置为 9090。由于需要连接 Nacos 注册中心,需要提供服务名称 goboy-gateway
,以及配置 Nacos 注册中心地址 127.0.0.1:9001。
接下来是网关的重要配置 spring.cloud.gateway.routes:
- **id:**这是路由规则的开始,指定了这个路由规则的唯一标识符(id)。在这里,路由的id是 "nacos-provider"。
- **uri:**请求应该转发到的目标 URI,lb: 表示负载均衡,将请求转发到名为 "nacos-provider" 的服务。
- **predicates:**路由条件,这是一个断言(predicate)的列表,用于匹配请求的条件。
- Path=/provider/**
:这个断言指定了请求的路径必须以 "/provider/" 开头,且可以有任意后缀。只有满足这个条件的请求才会被应用这个路由规则。 - **filters:**这是一个路由过滤器(filter)的列表,用于对请求进行一些处理或转换。
- StripPrefix=1
:这个过滤器指定了要去掉请求路径的前缀。在这里,它去掉了一个路径段,因此如果请求是 "/provider/example",则经过这个过滤器后,会变成 "/example"。
添加启动类
package com.cloud.goboy.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class GoboyGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GoboyGatewayApplication.class, args);
}
}
启动服务
复用文章《Spring Cloud 使用 Nacos 注册中心》服务提供者 nacos-provider 作为路由转发的微服务。
启动的实例如下图所示:
测试
访问http://localhost:9000/provider/provider/hello
会将请求路由至 nacos-provider 的微服务,且请求接口地址为 /provider/hello,浏览器输出:
hello
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?