快速理解微服务中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 的微服务,并添加一些请求和响应头。

相关推荐
橙某人4 小时前
微前端(qiankun)之应用间的通信方案-发布订阅
前端·vue.js·微服务
yours_Gabriel5 小时前
【微服务】 Eureka和Ribbon
java·微服务·eureka·ribbon
小扳5 小时前
微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用
java·运维·分布式·后端·spring·微服务·架构
yours_Gabriel21 小时前
【SpringBoot问题】IDEA中用Service窗口展示所有服务及端口的办法
java·微服务·springboot
wclass-zhengge1 天前
02微服务系统与设计(D1_走出微服务误区:避免从单体到分布式单体)
分布式·微服务·架构
黄俊懿1 天前
【深入理解SpringCloud微服务】Sentinel功能详解
后端·spring·spring cloud·微服务·中间件·架构·sentinel
运维&陈同学1 天前
【zookeeper04】消息队列与微服务之zookeeper客户端访问
linux·后端·微服务·zookeeper·云原生·消息队列·云计算
petaexpress1 天前
k8s微服务架构就是云原生吗?两者是什么关系
微服务·云原生·架构·kubernetes·k8s
HuaLuLemon1 天前
03-微服务搭建
java·微服务·gulimall