• Spring Cloud Gateway快速入门(四)——gateway最最重要的功能!Gateway如何实现的服务匹配


    前言

    Gateway如何实现的服务匹配也gateway最重要的功能,也是通过前两篇文章过滤器和断言共同配合,完成了服务匹配的功能。

    为什么要使用gateway进行服务的分配

    集中化的路由管理:

    Gateway作为一个统一的入口,可以集中管理和配置所有的服务路由规则。通过配置路由规则,可以将不同的请求路由到不同的后端服务,实现请求的分发和转发。这样可以避免在每个服务中都进行路由配置的繁琐和重复性工作。

    动态路由的支持:

    Gateway支持动态路由的配置,可以在运行时动态地添加、修改和删除路由规则。这样可以实现灵活的服务路由管理,无需重启网关服务即可生效。同时,动态路由的支持也方便了服务的动态扩展和迁移。

    请求过滤和处理:

    Gateway支持自定义的过滤器,可以对请求进行鉴权、转发、限流、重试等各种处理。通过过滤器的配置,可以对请求进行统一的处理和转换,减轻后端服务的负担。此外,Gateway还提供了一些内置的过滤器,如请求日志、请求转发等,方便开发者使用和扩展。

    高性能和高可靠性:

    Gateway基于Netty和Reactor等高性能的网络框架,具有高并发和低延迟的特点。同时,Gateway还支持负载均衡和熔断器等机制,可以提高服务的可靠性和稳定性。通过Gateway的服务分配功能,可以实现请求的快速响应和高可用性。

    综上所述,使用Gateway进行服务的分配可以提供集中化的路由管理、动态路由的支持、请求过滤和处理的功能,同时还具有高性能和高可靠性的特点。这些优势使得Gateway成为微服务架构中重要的组件之一。

    1. 介绍

    Spring Cloud Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor的API网关。它旨在为微服务架构提供简单、有效和灵活的路由器和过滤器机制。其中,服务匹配是Gateway的核心功能之一。

    2. 服务匹配的概念

    服务匹配是指将进入网关的请求与后端的微服务进行匹配,以确定请求应该被路由到哪个微服务处理。在Gateway中,服务匹配是通过路由规则来实现的。

    2.1 路由规则

    路由规则定义了请求的匹配条件和目标服务的路由规则。它由两部分组成:Predicate(断言)Filter(过滤器)

    2.1.1 Predicate(断言)

    Predicate用于定义请求的匹配条件,包括请求的路径、请求的方法、请求的头等。只有当请求满足Predicate的条件时,才会进入该路由规则。

    spring:
      cloud:
        gateway:
          routes:
            - id: service1_route
              uri: http://localhost:8081
              predicates:
                - Path=/service1/**
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述示例中,断言Path=/service1/**表示只有请求路径以/service1/开头的请求才会匹配到该路由规则。

    2.1.2 Filter(过滤器)

    Filter用于对请求进行处理和转换。它可以在请求被路由到目标服务之前或之后进行处理。Filter可以用于实现各种功能,如请求鉴权、请求转发、请求限流、请求重试等。

    spring:
      cloud:
        gateway:
          routes:
            - id: service1_route
              uri: http://localhost:8081
              predicates:
                - Path=/service1/**
              filters:
                - StripPrefix=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上述示例中,过滤器StripPrefix=1表示将请求的路径前缀去除1级,例如/service1/api会被转发到目标服务的路径为/api

    2.2 路由规则的配置

    路由规则的配置可以通过配置文件或者编程方式实现。

    2.2.1 配置文件方式

    在配置文件中添加路由规则的配置,如下所示:

    spring:
      cloud:
        gateway:
          routes:
            - id: service1_route
              uri: http://localhost:8081
              predicates:
                - Path=/service1/**
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述示例中,配置了一个路由规则,将请求路径以/service1/开头的请求路由到http://localhost:8081

    2.2.2 编程方式

    通过编程方式配置路由规则,可以在启动类中添加@Bean注解的方法来创建RouteLocator实例,并配置路由规则,如下所示:

    @Configuration
    public class GatewayConfig {
    
        @Bean
        public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
            return builder.routes()
                    .route("service1_route", r -> r.path("/service1/**")
                            .uri("http://localhost:8081"))
                    .build();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    上述示例中,通过RouteLocatorBuilder创建了一个路由规则,将请求路径以/service1/开头的请求路由到http://localhost:8081

    3. gateway实现服务匹配核⼼的作⽤

    路由匹配:
    在这里插入图片描述

    4. gateway工作的整体流程图

    在这里插入图片描述
    客户端向 Spring Cloud GateWay发出请求,然后在 GateWay Handler Mapping 中找到与请求相匹配的路由,将其发送到GateWay Web Handler;Handler再通过指定的过滤器链来将请求发送到我们实际的服务执⾏业务逻辑,然后返回。过滤器之间⽤虚线分开是因为过滤器可能会在发送代理请求之前(pre)或者之后(post)执⾏业务逻辑。

    Filter在“pre”类型过滤器中可以做参数校验、权限校验、流量监控、⽇志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改、⽇志的输出、流量监控等。
    GateWay核⼼逻辑:路由转发+执⾏过滤器链。

    5. 总结

    通过路由规则的配置,Spring Cloud Gateway可以实现请求的服务匹配功能。通过断言和过滤器的配置,可以灵活地定义请求的匹配条件和处理逻辑。同时,Gateway还提供了一些内置的过滤器,方便开发者使用和扩展。通过Gateway的服务匹配功能,可以实现灵活的请求路由和请求处理,提升微服务架构的可扩展性和灵活性。

    以上就是关于Gateway如何实现服务匹配的介绍,希望对你有所帮助!

  • 相关阅读:
    【mybatis注解开发+二级缓存】
    找实习之从0开始的后端学习日记【9.17】
    功能解剖学重点
    【数据结构】二叉搜索树
    Unity的碰撞检测(五)
    智慧城市-疫情流调系列4-Prompt-UIE,生成式通用信息抽取-paddlenlp
    pandas 读取三种常见格式(txt、excel、csv)
    python+django协同过滤算法的音乐推荐系统研究vue
    【软考】2023下半年系统集成项目管理工程师案例分析真题(第五批次)
    论文解读(ARVGA)《Learning Graph Embedding with Adversarial Training Methods》
  • 原文地址:https://blog.csdn.net/yangsimo/article/details/133176637