微服务网关之Spring Cloud Gateway
API网关的作用:
网关在客户端和服务端之间加了一个API网关。整体来看,网关有点类似于门面,所有的外部请求都会经过网关这一层。
对于商品详情展示的场景来看,增加了API网关之后,在API网关层可以把后端的多个服务进行整合,然后提供唯一的业务接口,
客户端只需要调用这个接口即可完成数据的获取及展示。在网关中在消费后端的多个微服务,进行统一的整合,给客户端返回唯一的响应。
网关不仅只是做一个请求的转发及服务的整合,有了网关这个统一的入口之后,它还能提供以下功能。
- 针对所有请求进行统一鉴权、限流、熔断、日志。
- 协议转化。针对后端多种不同的协议,在网关层统一处理后以HTTP对外提供服务.
- 统一错误码处理
- 请求转发,并且可以基于网关实现内、外网隔离。
下面针对上述网关作用的分析,选择几种常用的方案进行详细的说明。
Spring Cloud Gateway 原理分析
Spring Cloud Gateway 的请求处理,其中有几个非常重要的概念。
- 路由(Route):它是网关的基本组件,由ID、目标URI、Predicate集合、Filter集合组成。
- 谓词(Predicate):它是Java8 中引入的函数式接口,提供了断言的功能。它可以匹配HTTP请求中的任何内容。如果Predicate的聚合判断结果为true,则意味着该请求会被当前Router进行转发。
- 过滤器(Filter):为请求提供前置和后置的过滤。
Spring Cloud Gateway 启动时基于 Netty Server 监听一个指定的端口(该端口可以通过server.port 属性自定义)。当客户端发送一个请求到网关时,网关会根据一系列Predicate 的匹配结果来决定访问哪个Route路由,然后根据过滤器链进行请求的处理。过滤器链可以在请求发送到后端服务器之前和之后执行,也就是首先执行pre过滤器链,然后将请求到后端服务器,最后执行Post过滤器链。