SpringCloud GateWay 学习之路(一)

110 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

网关的概念

网关为微服务架构提供简单、有效且统一的API路由管理,作为系统的统一入口,提供内部服务的路由中转,给客户端提供统一的服务,可以实现一些和业务没有耦合的公用逻辑,主要功能包含认证、鉴权、路由转发、安全策略、防刷、流量控制、监控日志等。

请求路径:网页/h5 -> 负载均衡 -> 网关 -> 服务

GateWay

是Spring Cloud的一个全新的API网关项目,替换Zuul开发的网关服务,基于Spring5.0 + SpringBoot2.0 + WebFlux(基于性能的Reactor模式响应式通信框架Netty,异步阻塞模型)等技术开发。

基本概念

路由(Route)是GateWay中最基本的组件之一,表示一个具体的路由信息载体,主要由下面几个部分组成:

  • id:路由唯一标识,区别于其他的route
  • url: 路由指向的目的地URL,客户端请求最终被转发到的微服务
  • order: 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高
  • predicate:断言的作用是进行条件判断,只有断言为true,才执行路由
  • filter: 过滤器用于修改请求和响应信息

核心概念

  1. Gateway ClientSpring Cloud Gateway 发送请求
  2. 请求首先会被 HttpWebHandlerAdapter 进行提取组装成网关上下文
  3. 然后网关的上下文会传递到 DispatcherHandler ,它负责将请求分发给 RoutePredicateHandlerMapping
  4. RoutePredicateHandlerMapping 负责路由查找,并根据路由断言判断路由是否可用
  5. 如果过断言成功,由FilteringWebHandler 创建过滤器链并调用通过特定于请求的 Fliter 链运行请求,Filter 被虚线分隔的原因是Filter可以在发送代理请求之前(pre)和之后(post)运行逻辑
  6. 执行所有pre过滤器逻辑。然后进行代理请求。发出代理请求后,将运行“post”过滤器逻辑。
  7. 处理完毕之后将 Response 返回到 Gateway 客户端

Filter 过滤器

Filterpre 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等。

Filterpost 类型的过滤器可以做响应内容、响应头的修改、日志输出、流量监控

核心思想

当用户发出请求达到 GateWay 之后,会通过一些匹配条件,定位到真正的服务节点,并且在这个转发过程前后,进行一些细粒度的控制,其中 Predicate 断言 是我们的匹配条件 ,Filter 是一个拦截器,有了这两点,再加上URL,就可以实现一个具体的路由,核心思想:路由转发 + 执行过滤器链

Route(路由) :构建网关的基础模块,由ID、目标URL、过滤器等组成

Predicate(断言) :开发人员可以匹配HTTP请求中的内容(请求头和请求参数),如果请求断言匹配贼进行路由

Filter(过滤) :GateWayFilter的实例,使用过滤器,可以在请求被路由之前或者之后对请求进行修改