微服务网关Gateway简介

1. API网关

  1. API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。

5. 微服务网关Gateway - 图1

2. 网关组成

网关 = 路由转发 + 过滤器(编写额外功能)

2.1 路由转发
  1. 接收外界请求,通过网关的路由转发,转发到后端的服务上。
  2. 如果只有这个一个功能看起来和之前学习的Nginx反向代理服务器很像,外界访问nginx,由nginx做负载均衡,

后把请求转发到对应服务器上。

2.2 过滤器
  1. 网关非常重要的功能就是过滤器。可以把微服务中很多公共的功能都提出到网关的过滤器中,这样就可以实现

复用。如:认证功能、权限校验功能等。

  1. 由于网关是统一的入口,所以还可以在网关中实现一些记录或容错等逻辑实现。例如限流、监控、熔断、协议

转换、日志等。

3. Spring Cloud Gateway介绍

Spring Cloud Gateway是Spring Cloud 的二级子项目,提供了微服务网关功能,包含:权限安全、监控/指标等功能。

3.1 名词解释
  • Route
  1. Route中文称为路由,Gateway里面的Route是主要学习内容。一个路由包含IDURIPredicate集合、Filter集合。
  2. RouteID是自定的,URI就是一个地址。剩下的PredicateFilter学习明白了,Route就学习清楚了。
  • Predicate
  1. 中文:谓词。
  2. 谓词时学习Gateway比较重要的一点,简单点理解谓词就是一些附加条件和内容。
  • Filter
  1. 所有生效的Filter都是GatewayFilter的实例。在Gateway运行过程中Filter负责在代理服务“之前”或“之后”去做一些事情。

3.2 执行流程
  1. **当Gateway接收到外界请求后,如果Gateway Handler Mapping确认请求与路由匹配(Gateway可以包含多个Route),交给Gateway Web Handler 。之后交给特定的Filter 链进行处理,整个Filter 链的前置(pre)被执行后,执行代理的服·务(Proxied Service),最后执行Filter 链的post部分。返回给Gateway Web Handler,在返回给Gateway Web Handler Mapping,最终返回给客户端。**

5. 微服务网关Gateway - 图2

4. Filter

  1. Filter作用:在路由转发到代理服务之前和代理服务返回结果之后额外做的事情。Filter执行了说明谓词条件通过了。

在Spring Cloud Gateway的路由中Filter分为:

  • 内置Filter,都是GatewayFilter实现类


之前使用StripPrefix就是内置Filter,所有内置Filter都实现Gateway接口。使用时filters属性中过滤器名为XXXGatewayFilterFactory的类对应的名称为XXX。

5. 微服务网关Gateway - 图3

  • 自定义GlobalFilter

全局过滤器不需要工厂,也不需要配置,直接对所有的路由都生效。

且在项目中可以配置多个GlobalFilter的实现类。都可以自动执行

  1. @Component
  2. public class MyGlobalFilter implements GlobalFilter {
  3. private static Logger logger = LoggerFactory.getLogger(MyGlobalFilter.class);
  4. @Override
  5. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  6. //获取请求对象
  7. ServerHttpRequest request = exchange.getRequest();
  8. //日志打印
  9. logger.info("请求路径:{}", request.getURI().toString());
  10. //执行过滤器
  11. return chain.filter(exchange);
  12. }
  13. }