• Gateway:网关


    Spring Cloud Gateway:网关

    一、什么是API网关

    1. 什么是API网关?

    ​ API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。

    ​ 总结:网关就是所有项目的一个统一入口。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5IhnALEy-1661434114278)(images/api1.png)]

    2. API网关的重要性

    ​ API 网关并不是微服务场景中必须的组件,如下图,不管有没有 API 网关,后端微服务都可以通过 API 很好地支持客户端的访问。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZiWDHSIA-1661434114281)(images/api2.jpg)]

    ​ 但对于服务数量众多、复杂度比较高、规模比较大的业务来说,引入 API 网关也有一系列的好处:

    • 聚合接口使得服务对调用者透明,客户端与后端的耦合度降低

    • 聚合后台服务,节省流量,提高性能,提升用户体验

    • 提供安全、流控、过滤、缓存、计费、监控等 API 管理功能

      所以,在分布式微服务架构中,API网关的重要性是非常高的。

    3. API网关的组成

    API网关由路由转发过滤器(编写额外功能)组成。

    3.1 路由转发

    ​ 接收外界请求,通过网关的路由转发,转发到后端的服务上。

    3.2 过滤器

    ​ 网关非常重要的功能就是过滤器。在Gateway中,过滤器默认提供了25内置功能还支持额外的自定义功能。

    ​ 对于我们来说比较常用的功能有网关的容错、限流以及请求及相应的额外处理等。

    4. Spring Cloud中提供的API网关解决方案

    4.1 Spring Cloud Gateway

    ​ 由Spring 自己推出的网关产品,完全依赖Spring自家产品。符合Spring战略意义,其更新版本等都由Spring自己把控。目前很多项目中都是使用Gateway替代Zuul。在本套课程中讲解的也是Gateway。

    4.2 Spring Cloud Netflix Zuul

    ​ 属于Spring Cloud Netflix下一个组件,具有灵活、简单的特点。在早期Spring Cloud中使用的比较多。其版本更新都依赖于Netflix Zuul。

    二、Spring Cloud Gateway介绍

    1. Spring Cloud Gateway简介

    ​ Spring Cloud Gateway是Spring Cloud 的二级子项目,提供了用于在Spring网络流程中构建API网关的代码库,旨在提供一个简单有效的方式,路由到API;并提供了必要的各种功能,如:路由、权限安全、监控/指标等。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obpvqNJd-1661434114282)(images/gateway1.png)]

    2. Spring Cloud Gateway名词

    ​ 在学习Gateway时里面有一些名词需要提前了解,这对于后面的学习是很有帮助的。

    2.1 Route - 路由

    ​ Route中文称为路由,Gateway里面的Route是主要学习内容,一个Gateway项目可以包含多个Route。

    ​ 一个路由包含ID、URI、Predicate集合、Filter集合。在Route中ID是自定义的,URI就是一个地址。剩下的Predicate和Filter学习明白了,Route就学习清楚了。

    2.2 Predicate - 谓词

    ​ 谓词是学习Gateway非常重要的一点,简单点理解:谓词就是一些路由前的条件和内容。

    2.3 Filter - 过滤器

    ​ 在Gateway运行过程中,Filter负责在路由后,代理服务“之前”或“之后”做的一些事情。

    3. Spring Cloud Gateway执行流程

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ug2ALyS0-1661434114284)(images/gateway2.png)]

    3.1 文字说明

    ​ 网关客户端访问Gateway网关,Gateway中Handler Mapping对请求URL进行处理。处理完成后,交由Web Handler处理,Web Handler 运行时会被Filter过滤。Filter中前半部分代码是处理请求的代码。处理完成后调用真实被代理的服务;被代理服务返回响应结果,结果会被Filter中后半部分代码过滤处理;操作完成后把结果返回给Web Hanlder,再返回给Handler Mapping,最终响应给客户端。

    4. Spring Cloud Gateway结构

    SpringCloud Gateway的底层基于Netty,主要组成有Predicates(谓词)、Route(路由)、Filter(过滤器)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgVtLMGc-1661434114287)(images/gateway3.png)]

    三、Gateway入门案例

    1. 准备Nacos注册中心

    ​ 使用前面课程中的Nacos注册中心即可。

    2. 准备一个微服务工程

    ​ 使用前面课程中的任意微服务工程即可。

    3. 搭建Gateway网关微服务

    3.1 POM依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>
        <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.2 编辑配置文件
    # 服务器端口, gateway启动器中,不包含Tomcat,自带Netty服务器。提供HTTP协议处理能力。
    server:
      port: 9999
    # 配置spring应用名字,并注册到nacos中
    spring:
      application:
        name: gateway-app
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.8.128:8848
        gateway: # 配置 spring cloud gateway 网关相关信息。
          discovery: # 网关发现机制,从注册中心中订阅哪些服务。默认订阅所有的服务。
            locator: # 默认的路由。默认路由方式是: http://网关IP:网关端口/要访问的具体服务名字/要访问的具体服务中的path地址3
              enabled: false # 是否开启默认的路由。默认是false。
              lower-case-service-id: true # 是否把注册中心的微服务名字,自动转换成全小写字母。默认是false。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    3.3 编辑启动类型
    @SpringBootApplication
    public class GatewayApplication {
       
        public static void main(String[] args) {
       
            SpringApplication.run(GatewayApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    3.4 启动Gateway并访问测试

    访问 http://localhost:9999/application-service/test ,可看到下述结果:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2L0hQlc6-1661434114288)(images/gateway4.png)]

    四、谓词-Predicate

    ​ 谓词:当满足条件在进行路由转发。

    ​ 在Spring Cloud Gateway中谓词实现GatewayPredicate接口。其中类名符合:XXXRoutePredicateFactory,其中XXX就是在配置文件中谓词名称。

    ​ 所有的谓词都设置在predicates属性中,当设置多个谓词时取逻辑与条件,且一个谓词只能设置一组条件,如果需要有个多条件,添加多个相同谓词。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h1WFUCwd-1661434114289)(images/gateway5.png)]

    1. Path

    ​ 用于匹配路由地址规则的谓词。

    1.1 使用方式

    ​ 修改配置文件application.yml:

    spring:
      application:
        name: cloud-gateway
      cloud: 
        gateway:
          discovery:
            locator:
              enabled<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    MySQL 的故事:一场 SQL 语句的戏剧演绎
    好数组——尺取法
    (附源码)springboot计算机专业大学生就业指南网 毕业设计 061355
    Canny算子与霍夫变换检测圆与直线
    c和cpp实现CPU核上绑定固定线程
    C#通过Process调用Python脚本
    外网系统怎么访问协同oa?快解析内网端口映射公网
    八、鼎捷T100生产管理之委外管理篇
    高通DSP架构和HVX指令介绍
    HIVE 表 DLL 基本操作(一)——第1关:Create/Alter/Drop 数据库
  • 原文地址:https://blog.csdn.net/woruosuifenglang/article/details/126533002