Gateway的简单介绍和使用

22 篇文章 0 订阅
7 篇文章 0 订阅

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

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor等技术构建的反向代理和路由解决方案。它可以用于构建微服务架构中的API网关,提供负载均衡、安全控制、限流等功能。 使用Spring Gateway可以通过简单的配置文件实现路由规则的定义,将请求转发到不同的微服务实例中。同时,它还支持自定义过滤器,可以对请求进行预处理、鉴权、限流等操作。 Spring Gateway使用步骤如下: 1.在项目中添加spring-cloud-starter-gateway依赖。 2.编写配置文件application.yml,定义路由规则和自定义过滤器。 3.启动Spring Gateway应用程序。 例如,以下是一个简单的application.yml配置文件示例: ``` spring: cloud: gateway: routes: - id: service-a uri: http://localhost:8081 predicates: - Path=/service-a/** - id: service-b uri: http://localhost:8082 predicates: - Path=/service-b/** filters: - name: RequestRateLimiter args: key-resolver: "#{@userKeyResolver}" redis-rate-limiter.replenishRate: 1 redis-rate-limiter.burstCapacity: 2 ``` 上述配置中,定义了两个路由规则:将以/service-a/开头的请求转发到http://localhost:8081服务实例上,将以/service-b/开头的请求转发到http://localhost:8082服务实例上。同时,还定义了一个自定义过滤器RequestRateLimiter,用于限制请求的访问速率。 需要注意的是,Spring Gateway默认使用Netty作为底层服务器,因此需要在应用程序中添加spring-boot-starter-webflux依赖。 以上就是使用Spring Gateway的基本步骤,具体的使用方式可以参考官方文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值