Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南
Spring Cloud Gateway是一个基于Spring 5和Spring Boot的API网关,提供了一种简单的方式来路由请求、处理命令和服务之间的通信。它使用了可插拔的过滤器,通过声明性路由实现动态路由,支持负载均衡、路径重写、安全认证等多种特性。本文将介绍如何部署和使用Spring Cloud Gateway。
一、环境准备
在开始之前,请确保以下环境已经搭建完毕:
- JDK 1.8或更高版本
- Maven 3.2或更高版本
- Spring Boot 2.5.x或更高版本
二、创建Spring Cloud Gateway项目
可以使用Spring Initializr快速生成一个Spring Boot项目。在Spring Initializr页面,选择以下依赖:
- Spring Web
- Spring Cloud Gateway
- Eureka Discovery Client(可选,用于服务注册与发现)
项目创建后,解压并导入到IDE中。
pom.xml 配置
在pom.xml
中添加Spring Cloud的依赖管理:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.0</version> <!-- 请根据最新版本进行更新 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
接着在依赖部分添加Gateway和Eureka Client依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
三、编写主程序
在src/main/java
目录下创建主应用程序类:
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);
}
}
四、配置Gateway路由
在src/main/resources/application.yml
中添加路由配置:
spring:
application:
name: gateway-service
cloud:
gateway:
routes:
- id: 微服务A
uri: lb://SERVICE-A # 这里可以使用服务名进行负载均衡
predicates:
- Path=/service-a/**
- id: 微服务B
uri: lb://SERVICE-B
predicates:
- Path=/service-b/**
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
在这个配置中,lb://SERVICE-A
和lb://SERVICE-B
表示我们的请求将会被路由到注册在Eureka注册中心的微服务A和B上。
五、使用自定义过滤器
可以自定义过滤器以增加请求的灵活性和控制能力。下面是一个简单的过滤器示例:
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
@Component
public class CustomFilter extends AbstractGatewayFilterFactory<Object> {
@Override
public GatewayFilter apply(Object config) {
return (exchange, chain) -> {
System.out.println("请求被拦截,执行自定义过滤器");
return chain.filter(exchange);
};
}
}
在application.yml
中使用该过滤器:
- id: 微服务C
uri: lb://SERVICE-C
predicates:
- Path=/service-c/**
filters:
- name: CustomFilter
六、启动服务
在Eureka Server启动后,运行Spring Cloud Gateway应用程序,访问 http://localhost:8080/service-a/ 或其他路由路径,将会被正确路由到相应的微服务。
七、总结
Spring Cloud Gateway使得微服务间的通信和管理变得更加简单而灵活。通过简单的配置,我们可以实现负载均衡、路由转发和自定义过滤等功能,是构建微服务架构的重要组成部分。在实际项目中,您可以根据需求进行更复杂的路由配置和过滤器设置,灵活应对各种场景。