持续创作,加速成长!这是我参与「掘金日新计划 · 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: 过滤器用于修改请求和响应信息
核心概念
Gateway Client向Spring Cloud Gateway发送请求- 请求首先会被
HttpWebHandlerAdapter进行提取组装成网关上下文 - 然后网关的上下文会传递到
DispatcherHandler,它负责将请求分发给RoutePredicateHandlerMapping RoutePredicateHandlerMapping负责路由查找,并根据路由断言判断路由是否可用- 如果过断言成功,由
FilteringWebHandler创建过滤器链并调用通过特定于请求的Fliter链运行请求,Filter被虚线分隔的原因是Filter可以在发送代理请求之前(pre)和之后(post)运行逻辑 - 执行所有pre过滤器逻辑。然后进行代理请求。发出代理请求后,将运行“post”过滤器逻辑。
- 处理完毕之后将
Response返回到Gateway客户端
Filter 过滤器
Filter 在 pre 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等。
Filter 在 post 类型的过滤器可以做响应内容、响应头的修改、日志输出、流量监控等
核心思想
当用户发出请求达到 GateWay 之后,会通过一些匹配条件,定位到真正的服务节点,并且在这个转发过程前后,进行一些细粒度的控制,其中 Predicate 断言 是我们的匹配条件 ,Filter 是一个拦截器,有了这两点,再加上URL,就可以实现一个具体的路由,核心思想:路由转发 + 执行过滤器链
Route(路由) :构建网关的基础模块,由ID、目标URL、过滤器等组成
Predicate(断言) :开发人员可以匹配HTTP请求中的内容(请求头和请求参数),如果请求断言匹配贼进行路由
Filter(过滤) :GateWayFilter的实例,使用过滤器,可以在请求被路由之前或者之后对请求进行修改