快速理解微服务中Gateway的概念

一.基本概念

定义:

在微服务架构中,Spring Cloud Gateway 是一个用于API网关的框架,它是一个基于 Spring Framework 的高效、可扩展的路由器和反向代理,它能够将外部请求转发到适当的微服务,并提供一些与请求处理相关的功能,如路由、负载均衡、限流、安全性等。

作用:

在微服务的架构下,前端是没有办法直接访问后端的微服务,因为每个微服务都有不同的IP和端口,所以就引入了API网管,引入之后,前端就只需访问API网关就可以了,里面的鉴权和转发、其他功能都是通过API网关来进行处理的。

二.三大核心功能

如图所示:

1.Route(路由) :路由是 Spring Cloud Gateway 的基本构建块,它定义了请求的匹配规则和转发目标,通过配置路由,可以将请求映射到后端的服务实例或URL上,路由规则可以根据请求的路径、方法、请求头等条件进行匹配(第二个核心,断言),并指定转发的目标URI;

2.Predicate(断言) :断言用于匹配请求的条件,如果请求满足断言的条件,则会应用所配置的过滤器(第三个核心,Filter),Spring Cloud Gateway提供了多种内置的断言,如Path(路径匹配)、Method(请求方法匹配)、Header(请求头匹配)等,同时也支持自定义断言;

3.Filter (过滤器) :过滤器用于对请求进行处理和转换,可以修改请求、响应以及执行其他自定义逻辑,Spring Cloud Gateway 提供了多个内置的过滤器,如请求转发、请求重试、请求限流等,同时也支持自定义过滤器(鉴权实现),可以根据实际需求来实现自定义过滤器。

三.工作原理

官网工作原理图如下:

Spring Cloud Gateway 的工作原理可以简要概括为:

1.请求进入网关:当客户端发起请求时,Spring Cloud Gateway 作为入口点接收到请求;

2.路由规则匹配:Spring Cloud Gateway 会根据配置的路由规则(Predicate)检查请求的各项信息,决定将请求转发到哪个微服务;

3.过滤器执行:请求经过前置过滤器(如果有的话),例如:进行身份验证、限流控制、修改请求等;

4.转发请求到微服务:请求被路由到目标微服务,网关通过服务发现机制找到合适的服务实例;

5.响应处理:微服务处理完请求后,将响应返回给网关,网关会经过后置过滤器进行处理(例如:修改响应、记录日志等);

6.响应返回客户端:最终,经过处理的响应会返回给客户端。

两个比较重要的概率:

1.Gateway Handler(网关处理器):网关处理器是Spring Cloud Gateway的核心组件,负责将请求转发到匹配的路由上,它根据路由配置和断言条件进行路由匹配,选择合适的路由进行请求转发,网关处理器还会依次应用配置的过滤器链,对请求进行处理和转换;

2.**Gateway Filter Chain(网关过滤器链):**网关过滤器链由一系列过滤器组成,按照配置的顺序依次执行, 每个过滤器就可以在请求前、请求后或者是发生异常的时候进行处理,过滤器的执行过程可以修改请求、响应以及执行其他自定义逻辑。

四.配置

java 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: my_route
          uri: lb://my-service
          predicates:
            - Path=/api/**   # 请求路径匹配 /api/**
          filters:
            - AddRequestHeader=X-Request-Foo, Bar   # 添加请求头
            - AddResponseHeader=X-Response-Foo, Bar  # 添加响应头

这个配置中,网关会把匹配 /api/** 路径的请求转发到名为 my-service 的微服务,并添加一些请求和响应头。

相关推荐
小安运维日记1 小时前
CKS认证 | Day4 最小化微服务漏洞
安全·docker·微服务·云原生·容器·kubernetes
Code季风3 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Code季风8 小时前
微服务分布式配置中心:Gin Web 服务层与 gRPC 服务层集成 Nacos 实战
分布式·微服务·rpc·架构·go·gin·consul
步、步、为营9 小时前
.net微服务框架dapr保存和获取状态
微服务·架构·.net
guojl12 小时前
微服务OpenFeign源码分析
spring cloud·微服务
guojl12 小时前
微服务OpenFeign使用手册
spring cloud·微服务
Code季风2 天前
Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)
前端·微服务·架构·go·gin
Code季风2 天前
Gin Web 服务集成 Consul:从服务注册到服务发现实践指南(下)
java·前端·微服务·架构·go·gin·consul
掘金-我是哪吒2 天前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构