微服务网关Gateway简介
1. API网关
API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。
2. 网关组成
网关 = 路由转发 + 过滤器(编写额外功能)
2.1 路由转发
接收外界请求,通过网关的路由转发,转发到后端的服务上。
如果只有这个一个功能看起来和之前学习的Nginx反向代理服务器很像,外界访问nginx,由nginx做负载均衡,
后把请求转发到对应服务器上。
2.2 过滤器
网关非常重要的功能就是过滤器。可以把微服务中很多公共的功能都提出到网关的过滤器中,这样就可以实现
复用。如:认证功能、权限校验功能等。
由于网关是统一的入口,所以还可以在网关中实现一些记录或容错等逻辑实现。例如限流、监控、熔断、协议
转换、日志等。
3. Spring Cloud Gateway介绍
Spring Cloud Gateway是Spring Cloud 的二级子项目,提供了微服务网关功能,包含:权限安全、监控/指标等功能。
3.1 名词解释
- Route
Route中文称为路由,Gateway里面的Route是主要学习内容。一个路由包含ID、URI、Predicate集合、Filter集合。
在Route中ID是自定的,URI就是一个地址。剩下的Predicate和Filter学习明白了,Route就学习清楚了。
- Predicate
中文:谓词。
谓词时学习Gateway比较重要的一点,简单点理解谓词就是一些附加条件和内容。
- Filter
所有生效的Filter都是GatewayFilter的实例。在Gateway运行过程中Filter负责在代理服务“之前”或“之后”去做一些事情。
3.2 执行流程
**当Gateway接收到外界请求后,如果Gateway Handler Mapping确认请求与路由匹配(Gateway可以包含多个Route),交给Gateway Web Handler 。之后交给特定的Filter 链进行处理,整个Filter 链的前置(pre)被执行后,执行代理的服·务(Proxied Service),最后执行Filter 链的post部分。返回给Gateway Web Handler,在返回给Gateway Web Handler Mapping,最终返回给客户端。**
4. Filter
Filter作用:在路由转发到代理服务之前和代理服务返回结果之后额外做的事情。Filter执行了说明谓词条件通过了。
在Spring Cloud Gateway的路由中Filter分为:
之前使用StripPrefix就是内置Filter,所有内置Filter都实现Gateway接口。使用时filters属性中过滤器名为XXXGatewayFilterFactory的类对应的名称为XXX。
全局过滤器不需要工厂,也不需要配置,直接对所有的路由都生效。
且在项目中可以配置多个GlobalFilter的实现类。都可以自动执行
@Component
public class MyGlobalFilter implements GlobalFilter {
private static Logger logger = LoggerFactory.getLogger(MyGlobalFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//获取请求对象
ServerHttpRequest request = exchange.getRequest();
//日志打印
logger.info("请求路径:{}", request.getURI().toString());
//执行过滤器
return chain.filter(exchange);
}
}