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-Alb://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使得微服务间的通信和管理变得更加简单而灵活。通过简单的配置,我们可以实现负载均衡、路由转发和自定义过滤等功能,是构建微服务架构的重要组成部分。在实际项目中,您可以根据需求进行更复杂的路由配置和过滤器设置,灵活应对各种场景。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部