Gateway的简单介绍和使用

1、Gateway简介:

Gateway 是一种 API 网关(API Gateway)技术,它作为微服务架构中的关键组件,负责为系统的外部请求与内部服务之间提供统一的接入点。Spring Cloud Gateway 是基于 Spring 生态系统实现的一个高性能、易扩展的 API 网关解决方案。它基于 Spring Boot 2.0、Spring WebFlux 和 Project Reactor 构建,具备以下核心特性:

  1. 路由与转发:根据预定义的路由规则,将接收到的请求转发到相应的后端服务。路由规则可以基于路径、HTTP 方法、请求头、查询参数、Cookie 等多种条件进行匹配。

  2. 过滤器机制:通过一系列的过滤器链来处理请求和响应,实现鉴权、限流、熔断、日志记录、跨域处理、请求转换等中间件功能。

  3. 服务发现:与 Spring Cloud 的服务注册与发现组件(如 Eureka、Consul 或 Nacos)无缝集成,支持动态路由,即根据服务注册表自动创建路由到各个微服务实例。

  4. 断路器集成:内置对 Hystrix(现已推荐使用 Spring Cloud Circuit Breaker 通用断路器抽象)的支持,实现服务调用的熔断和降级。

  5. 安全与监控:可通过插件化的方式集成 OAuth2、JWT 等安全机制,以及与 Prometheus、Zipkin 等监控工具配合,实现网关层面的安全控制和性能监控。

2、Spring Cloud Gateway 基本使用与配置

基本配置:

在 Spring Cloud Gateway 中,主要通过 YAML 或 properties 文件(通常为 application.yml 或 application.properties)进行配置。基本配置主要包括以下几个部分:

全局配置:

复制代码
server:
  port: 9527 # 网关服务端口

spring:
  application:
    name: cloud-gateway # 网关服务名称

  cloud:
    gateway:
      discovery:
        locator: # 与服务发现组件集成
          enabled: true # 开启从注册中心动态创建路由的功能

路由配置:

复制代码
spring:
  cloud:
    gateway:
      routes:
      - id: payment_routh # 路由 ID,需唯一
        uri: lb://CLOUD-PAYMENT-SERVICE # 转发的目标服务地址,使用服务名通过服务发现机制动态查找
        predicates:
        - Path=/Payment/getPaymentById/** # 路由匹配规则,基于请求路径
        - After=2020-11-20T17:07:24.352+08:00[Asia/Shanghai] # 时间断言,仅匹配在此时间点之后的请求
        # 其他断言,如基于请求头、Cookie、查询参数等的匹配规则

      - id: payment_routh2 # 另一条路由配置,同上
        uri: lb://CLOUD-PAYMENT-SERVICE
        predicates:
        - Path=/Payment/lb/**

过滤器配置:

虽然上面的示例中没有直接展示过滤器配置,但过滤器是 Spring Cloud Gateway 实现功能的核心。可以通过定义全局过滤器或路由级别的过滤器来添加自定义逻辑。例如,可以编写自定义过滤器实现鉴权、限流、日志记录等功能,并在配置文件中引用。

3、Spring Boot 整合 Spring Cloud Gateway 示例

以下是整合 Spring Cloud Gateway 的大致步骤:

3.1、创建 Spring Boot 项目:

使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择所需的 Spring Cloud 版本及相关依赖,包括 spring-cloud-starter-gateway。

3.2、添加依赖:

在项目的 pom.xml 或 build.gradle 文件中添加 Spring Cloud Gateway 依赖。例如,使用 Maven 的 pom.xml:

复制代码
<dependencies>
   <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!-- 如果使用服务发现,添加相应服务发现组件依赖,如 Eureka、Consul 或 Nacos -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- 其他依赖,如断路器、安全、监控等 -->
</dependencies>

3.3、配置网关:

在项目的 application.yml 或 application.properties 文件中按照前面提到的基本配置示例设置网关的各项参数,包括端口、服务名、路由规则、断言、过滤器等。

3.4、编写自定义过滤器(可选):

若有特殊需求,如自定义鉴权逻辑、限流策略等,可以编写自定义的 Gateway Filter。实现 GatewayFilter 接口或继承 AbstractGatewayFilterFactory 类,并在配置文件中引用。

3.5、启动应用:

启动 Spring Boot 应用,网关服务就会开始监听指定端口,并根据配置的路由规则和过滤器链处理接收到的请求。

GateWay中的具体代码实现,后面详述,本章知识简单介绍和说明

相关推荐
Wang's Blog几秒前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我123455 分钟前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
小小张说故事1 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
X54先生(人文科技)1 小时前
百度智能对 X54 先生学科底色评估
人工智能·深度学习·百度·架构
LaughingZhu1 小时前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
HelloWorld0011 小时前
拒绝被大模型算力绑架!基于语义复杂度与意图分流打造多模型混合动态路由网关(全套架构+实战)
架构
AI架构师之家1 小时前
我把 Hermes 这匹"马"养了两周,它干了一件让我有点发毛的事
后端
Raas1001 小时前
AI网关怎么部署?MAI Gateway部署实操教程
人工智能·开源·gateway·mai gateway·企业级ai产品
dpharness1 小时前
块协议用了两周,我把九个坑按顺序记下来了
后端