什么是服务网关?

服务网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。服务网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

为什么要选用Gateway?

SpringCloud Gateway(异步非阻塞模型)使用的是Webflux中的reactor-netty响应式变成组件,底层使用了Netty通讯框架,提升了网关的性能,而以前使用的Zuul目前已不再维护。

网关的作用?

反向代理、鉴权、流量控制、熔断、日志监控…

网关在系统中处于哪一层?

所有微服务的入口。
image.png

网关的三大核心概念

路由(route)、断言(predicate)、过滤(fliter)

  • 路由:由ID、目标URI、一系列断言和过滤器组成,如果的断言为true则匹配该路由。
  • 断言:开发人员可以匹配HTTP请求中的所有内容(如请求头/请求参数),如请求与断言相匹配则进行路由分配。
  • 过滤:使用过滤器可以在请求被路由转发前或后对请求进行修改,进行精细化控制。

    gateway工作流程

    路由转发+执行过滤器链
    image.pngimage.png

    网关配置

  • yml文件中添加如下代码

image.png

  • 代码中注入RouteLocator的Bean

@Configuration
**public class **``GateWayConfig {
@Bean
**public **``RouteLocator customRouteLoactor(RouteLocatorBuilder routeLocatorBuilder) {
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
routes.route(``**"path_route_atguigu"**``, //路由规则名称,不可重名
r -> r.path(``**"/guonei"**``) //访问/...时转到uri的地址
.uri(``**"https://news.baidu.com/guonei"**``)).build();
**return **``routes.build();
}
...
}

断言的详细配置

断言可以配置After、Before等如下项目。可参照Spring Cloud Gateway官方文档的第四部分

image.png

过滤的详细配置

1处必须被继承,2和3为继承类所需实现的方法。3表示优先级,数字越小优先级越大;2表示过滤方法,若不满足条件则返回,满足条件则进行下一个过滤条件。
image.png