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.ymlapplication.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.xmlbuild.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.ymlapplication.properties 文件中按照前面提到的基本配置示例设置网关的各项参数,包括端口、服务名、路由规则、断言、过滤器等。

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

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

3.5、启动应用

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

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

相关推荐
只因在人海中多看了你一眼1 小时前
分布式缓存 + 数据存储 + 消息队列知识体系
分布式·缓存
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
zhixingheyi_tian4 小时前
Spark 之 Aggregate
大数据·分布式·spark
冰帝海岸4 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了5 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
求积分不加C5 小时前
-bash: ./kafka-topics.sh: No such file or directory--解决方案
分布式·kafka
nathan05295 小时前
javaer快速上手kafka
分布式·kafka
小二·5 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端