简介
Spring Cloud Gateway是作为Spring Cloud生态系中的网关,其目标是替代Netflix Zuul,它不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点和限流等。
核心概念
Spring Cloud Gateway最主要的功能就是路由转发,而在定义转发规则时主要涉及了以下三个核心概念
1、Route(路由)
Route是网关的基础元素,由ID、目标URI、断言、过滤器组成。当请求到达网关时,由GateWay Handler Mapping通过断言进行路由匹配,当断言为真,匹配到路由
2、Predicate(断言)
路由转发的判断条件,我们可以通过断言对HTTP请求进行匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务。
3、Filter(过滤器)
过滤器,我们可以使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理。
Spring Cloud GateWay工作原理
Spring Cloud Gateway的工作原理跟zuul的差不多,最大的区别就是Gateway的Filter只有pre和post两种。
(客户端向Spring Cloud Gateway发出请求,如果请求与网关程序定义的路由匹配,则该请求就会被发送到网关wen处理程序,此时处理程序运行特定的请求过滤器。
过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有pre过滤器逻辑先执行,然后执行代理请求;代理请求完成后,执行post过滤器逻辑。
)
1、客户端将请求发送到Spring Cloud Gateway上
2、Spring Cloud Gateway通过Gateway Handler Mapping找到与请求相匹配的路由,将其发送给Gateway Web Handler.
3、Gateway Web Handler通过指定的过滤器链,将请求转发到实际的服务节点中,执行业务逻辑返回响应结果
4、过滤器之间用虚线分开是因为过滤器可能会在转发之前(pre)或之后(post)执行业务逻辑
5、过滤器可以在响应返回客户端之前,对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等
7、响应原路返回给客户端
总而言之,客户端发送到Spring Cloud Gateway的请求需要通过一定的匹配条件,才能定位到真正的服务节点。在将请求转发到服务进行处理的过程前后(pre和post),我们还可以对请求和响应进行一些精细化控制。
断言就是路由的匹配条件,而Filter就是对请求和响应进行精细化控制的工具,有了这两个元素,再加上目标URI,就可以实现一个具体的路由了。
路由相关配置
断言
Spring Cloud Gateway通过断言来实现路由的匹配规则,简单来说,断言是路由转发的判断条件,请求只有满足了断言的条件,才会被转发到指定的服务上进行处理。
使用断言需要注意:路由与断言的对应关系为“一对多”,一个路由可以包含多个不同断言;一个请求想要转发到指定的路由上,就必须同时匹配路由上的所有断言;当一个请求同时满足多个路由的断言条件时,请求只会被首个匹配的路由转发
过滤器
pre类型:这种过滤器在请求被转发到微服务之前可以对请求进行拦截和修改,例如参数检验、权限检验、流量监控、日志输出以及协议格式转换等操作
post类型:这种过滤器在微服务对请求做出响应后可以对响应进行拦截和再处理,例如修改响应内容或响应头、日志输出、流量监控等。