Gateway

SpringCloudGateway是一个基于SpringFramework和SpringBoot的API网关,用于构建微服务的边缘服务。它提供路由转发、负载均衡、过滤器(如请求鉴权和限流)以及熔断器功能,简化客户端对多个服务的调用,并能与服务注册中心集成进行动态路由。此外,还支持监控和统计,增强微服务架构的稳定性和管理性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

        在微服务架构中,每个服务通常都有自己的API接口,这些接口可能会有不同的URL路径、请求方法、认证方式等。当客户端需要访问多个服务时,需要对每个服务的接口进行管理和调用,这会增加客户端的复杂性和开发工作量。

        为了简化客户端的调用和管理,引入网关是一种常见的做法。网关作为服务调用的入口,可以将客户端的请求转发到不同的后端服务,并提供统一的接口和协议。这样,客户端只需要与网关进行交互,而不需要直接与后端服务进行通信。

Gateway介绍

Spring Cloud Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor的API网关。它是Spring Cloud生态系统中的一部分,用于构建微服务架构中的边缘服务。Spring Cloud Gateway的主要作用如下:

  1. 路由转发:Spring Cloud Gateway可以根据请求的路径、方法、头部等信息将请求转发到不同的目标服务。它支持动态路由配置,可以根据需要动态地添加、删除或修改路由规则。

  2. 负载均衡:Spring Cloud Gateway可以与服务注册中心集成,自动发现并负载均衡请求到后端的多个实例。它支持多种负载均衡算法,如轮询、随机、权重等。

  3. 过滤器:Spring Cloud Gateway内置了许多过滤器,用于在请求被转发到目标服务之前或之后进行一些处理。这些过滤器可以用于请求鉴权、请求日志记录、请求重试、请求限流等。

  4. 熔断器:Spring Cloud Gateway可以集成熔断器,当目标服务出现故障或超时时,可以自动触发熔断机制,避免请求堆积和服务雪崩。

  5. 监控和统计:Spring Cloud Gateway提供了丰富的监控和统计功能,可以实时查看请求的流量、延迟、错误率等指标,帮助开发人员快速定位和解决问题。

        Spring Cloud Gateway是一个灵活、可扩展且功能强大的API网关,可以帮助开发人员快速构建和管理微服务架构中的边缘服务。它提供了路由转发、负载均衡、过滤器、熔断器、监控和统计等功能,使得微服务架构更加稳定、可靠和易于管理。

Gateway的工作原理

 

  1. 客户端发送请求:客户端发送请求到Spring Cloud Gateway。

  2. 路由匹配:Gateway根据请求的URL路径、请求方法、头部等信息,匹配对应的路由规则。

  3. 路由转发:根据匹配到的路由规则,Gateway将请求转发到相应的后端服务。它可以与服务注册中心集成,自动发现并负载均衡请求到后端的多个实例。

  4. 过滤器处理:Gateway可以在请求被转发到后端服务之前或之后,通过过滤器对请求进行处理。过滤器可以用于请求鉴权、请求日志记录、请求重试、请求限流等。

  5. 返回响应:后端服务处理完请求后,将响应返回给Gateway。Gateway可以对响应进行处理,例如添加头部、修改响应内容等。

  6. 返回给客户端:Gateway将经过处理的响应返回给客户端。

Gateway的使用

 添加依赖

<!-- 引入gateway网关 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </exclusion>
    </exclusions>
</dependency>

路由配置 

spring:
  cloud:
    gateway:
      # 路由数组:指当请求满足什么样的断言时,转发到哪个服务上
      routes:
        # 路由标识,要求唯一,名称任意
        - id: gateway-provider_1
          # 请求最终被转发到的目标地址
          uri: http://localhost:9024
          # 设置断言
          predicates:
            # Path Route Predicate Factory 断言,满足 /gateway/provider/** 路径的请求都会被路由到 http://localhost:9024 这个uri中
            - Path=/gateway/provider/**
            # Weight Route Predicate Factory 断言,同一分组按照权重进行分配流量,这里分配了80%
            # 第一个group1是分组名,第二个参数是权重
            - Weight=group1, 8
          # 配置过滤器(局部)
          filters:
            # StripPrefix:去除原始请求路径中的前1级路径,即/gateway
            - StripPrefix=1            
            
        - id: gateway-provider_2
          uri: http://localhost:9025
          # 设置断言
          predicates:
            - Path=/gateway/provider/**
            # Weight Route Predicate Factory,同一分组按照权重进行分配流量,这里分配了20%
            - Weight=group1, 2
          # 配置过滤器(局部)
          filters:
            # StripPrefix:去除原始请求路径中的前1级路径,即/gateway
            - StripPrefix=1            

  Spring Cloud Gateway 中的断言命名都是有规范的,格式:“xxx + RoutePredicateFactory”,比如权重断言 WeightRoutePredicateFactory,那么配置时直接取前面的 “Weight”。

        如果路由转发匹配到了两个或以上,则是的按照配置先后顺序转发,上面都配置了路径:“ Path=/gateway/provider/** ”,如果没有配置权重,则肯定是先转发到 “http://localhost:9024”,但是既然配置配置了权重并且相同的分组,则按照权重比例进行分配流量。
 

 

03-08
### 网关 Gateway 技术介绍 网关(Gateway),特别是指 API 网关,在分布式服务架构、微服务架构中扮演着至关重要的角色[^1]。作为系统的入口,API 网关负责接收所有的客户端请求并将其转发给适当的服务实例。这不仅简化了前端应用与后端多个微服务之间的交互过程,还允许开发者集中处理跨域资源共享(CORS)、身份验证(Authentication)等问题。 对于采用 Spring Cloud 的项目而言,Spring Cloud Gateway 成为了构建 API 网关的理想选择之一。该框架旨在提供一种简单且高效的方式来配置路由规则以及实现诸如安全性、监控/度量等功能,这一切都是通过强大的过滤器机制来完成的[^2]。 具体来说,当一个 HTTP 请求到达 Spring Cloud Gateway 后,它会依次经过三种类型的过滤器:特定于当前路由定义的过滤器、全局默认过滤器(`DefaultFilter`)和全局过滤器(`GlobalFilter`)[^4]。这些过滤器可以在请求被发送到目标服务之前或响应返回给客户端之后执行各种操作,比如修改请求头信息、记录日志等。 随着技术的发展趋势,越来越多的企业倾向于使用更现代化的技术栈来进行开发工作;因此,在许多情况下,相较于 Zuul 而言,Spring Cloud Gateway 显示出了更高的性能表现和发展潜力,逐渐成为事实上的标准解决方案[^3]。 ### 使用场景 - **统一接入层**:为所有外部调用者提供单一接口,隐藏内部复杂性的同时提高灵活性。 - **流量管理**:支持动态调整不同版本间的流量分配策略,便于灰度发布和服务治理。 - **协议转换**:能够将来自不同源的数据格式标准化后再传递给下游服务消费。 - **认证授权**:集成 OAuth2.0 或 JWT 等第三方鉴权组件,保护资源免受未授权访问威胁。 - **熔断降级**:设置合理的超时时间和重试次数,防止因单点故障引发连锁反应影响整体稳定性。 ```java // 示例代码展示如何创建简单的 Spring Cloud Gateway 应用程序 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值