Gateway

前言

        在微服务架构中,每个服务通常都有自己的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”,但是既然配置配置了权重并且相同的分组,则按照权重比例进行分配流量。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值