找回密码
 立即注册
查看: 397|回复: 0

[后端] Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-6-3 12:26:33 | 显示全部楼层 |阅读模式
本帖最后由 Shaw0xyz 于 2024-6-9 13:56 编辑

1. 引言

在微服务架构中,服务网关(API Gateway)是一个关键组件,它充当客户端和后端服务之间的中间层,负责请求路由、负载均衡、认证鉴权、限流熔断等功能。Spring Cloud Gateway是Spring Cloud生态系统中的一个核心项目,提供了一个简单而强大的API网关解决方案。本文将详细介绍Spring Cloud Gateway的部署与使用指南。

1.1 Spring Cloud Gateway概述

Spring Cloud Gateway基于Spring 5.0、Spring Boot 2.0和Project Reactor构建,旨在为微服务架构提供一种简单而有效的路由方式。其主要特点包括:

(1) 易于与Spring生态系统集成。
(2) 支持断言和过滤器,提供丰富的功能。
(3) 基于非阻塞API,高效处理请求。

2. 环境准备

在开始部署Spring Cloud Gateway之前,需要准备以下环境和工具:

(1) JDK 1.8及以上版本
(2) Spring Boot 2.3.0及以上版本
(3) 一个IDE,如IntelliJ IDEA或Eclipse
(4) Maven或Gradle构建工具

2.1 创建基础项目

首先,使用Spring Initializr创建一个Spring Boot项目,选择以下依赖项:

(1) Spring Boot Starter Web
(2) Spring Cloud Starter Gateway
(3) Spring Boot Actuator

3. 配置Spring Cloud Gateway

在完成项目创建后,需要对Spring Cloud Gateway进行配置。主要包括路由配置和全局过滤器配置。

3.1 路由配置

在application.yml文件中配置路由:

  1. spring:
  2.   cloud:
  3.     gateway:
  4.       routes:
  5.         - id: example_route
  6.           uri: <a href="http://httpbin.org:80" target="_blank">http://httpbin.org:80</a>
  7.           predicates:
  8.             - Path=/get
  9.           filters:
  10.             - AddRequestHeader=Example, Header
复制代码


上述配置定义了一个简单的路由规则,将请求路径为/get的请求转发到http://httpbin.org:80,并添加一个请求头Example。

3.2 全局过滤器

全局过滤器可以对所有路由生效。下面是一个简单的全局过滤器示例:

  1. import org.springframework.cloud.gateway.filter.GlobalFilter;
  2. import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.core.Ordered;
  6. import org.springframework.core.annotation.Order;
  7. import org.springframework.web.server.ServerWebExchange;
  8. import reactor.core.publisher.Mono;

  9. @Configuration
  10. public class GlobalFilterConfig {

  11.     @Bean
  12.     @Order(Ordered.HIGHEST_PRECEDENCE)
  13.     public GlobalFilter customGlobalFilter() {
  14.         return (exchange, chain) -> {
  15.             // 在请求处理前执行的逻辑
  16.             System.out.println("Global Filter pre-processing");

  17.             return chain.filter(exchange).then(Mono.fromRunnable(() -> {
  18.                 // 在请求处理后执行的逻辑
  19.                 System.out.println("Global Filter post-processing");
  20.             }));
  21.         };
  22.     }
  23. }
复制代码

4. 启动并测试Spring Cloud Gateway

配置完成后,可以启动Spring Boot应用,并测试Spring Cloud Gateway的路由功能。

4.1 启动应用

在IDE中运行Spring Boot主类,启动应用:

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

  3. @SpringBootApplication
  4. public class GatewayApplication {
  5.     public static void main(String[] args) {
  6.         SpringApplication.run(GatewayApplication.class, args);
  7.     }
  8. }
复制代码


4.2 测试路由

在浏览器或使用curl命令测试配置的路由:

  1. curl http://localhost:8080/get
复制代码


如果配置正确,将会得到httpbin.org的响应,并且请求头中包含Example: Header。

5. 进阶功能

Spring Cloud Gateway还支持许多高级功能,如负载均衡、熔断器、限流等。下面介绍如何配置这些功能。

5.1 负载均衡

Spring Cloud Gateway可以与Spring Cloud LoadBalancer集成,实现负载均衡。首先,添加Spring Cloud LoadBalancer依赖:

  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  4. </dependency>
复制代码


然后,在application.yml文件中配置服务实例:

  1. spring:
  2.   cloud:
  3.     gateway:
  4.       routes:
  5.         - id: example_route
  6.           uri: lb://example-service
  7.           predicates:
  8.             - Path=/get
复制代码

确保example-service在Eureka或其他注册中心中注册。

5.2 熔断器

Spring Cloud Gateway集成了Resilience4j熔断器。配置熔断器需要添加以下依赖:

  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
  4. </dependency>
复制代码


然后,在路由配置中添加熔断器:

  1. filters:
  2.   - name: CircuitBreaker
  3.     args:
  4.       name: myCircuitBreaker
复制代码


5.3 限流

Spring Cloud Gateway支持基于Redis的限流。添加Spring Data Redis依赖:

  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
  4. </dependency>
复制代码


在路由配置中添加限流过滤器:

  1. filters:
  2.   - name: RequestRateLimiter
  3.     args:
  4.       redis-rate-limiter.replenishRate: 10
  5.       redis-rate-limiter.burstCapacity: 20
复制代码


6. 结论

通过本文的讲解,我们了解了如何部署和使用Spring Cloud Gateway。Spring Cloud Gateway不仅提供了强大的路由功能,还支持负载均衡、熔断器和限流等高级特性,是构建微服务架构中服务网关的理想选择。在实际应用中,可以根据具体需求进行灵活配置和扩展,以满足业务需求。



/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & linux ...

~互撩~ TG: @Shaw_0xyz
荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-4 13:40 , Processed in 0.052772 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表