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中的具体代码实现,后面详述,本章知识简单介绍和说明

相关推荐
金刚猿4 分钟前
openfeign 拦截器实现微服务上下文打通
微服务·云原生·架构
码上飞扬38 分钟前
Java大师成长计划之第22天:Spring Cloud微服务架构
java·运维·云计算
lcw_lance1 小时前
业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)
数据库·分布式·微服务
秋野酱1 小时前
基于javaweb的SpringBoot自习室预约系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
Naylor1 小时前
微服务概述
微服务·架构·springcloud
呆萌很1 小时前
基于 Spring Boot 瑞吉外卖系统开发(十五)
spring boot
weloveut1 小时前
西门子WinCC Unified PC的GraphQL使用手册
后端·python·graphql
lichuangcsdn1 小时前
【springcloud学习(dalston.sr1)】Eureka单个服务端的搭建(含源代码)(三)
学习·spring cloud·eureka
面试官E先生1 小时前
【极兔快递Java社招】一面复盘|数据库+线程池+AQS+中间件面面俱到
java·面试
琢磨先生David1 小时前
构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践
java·设计模式·建造者模式