本文来回顾学习springcloud的网关gateway,springcloud gateway是在spring的基础上构建的一套api服务网关,基于spring5,springboot2.x和project reactor,使用了 Webflux 中的 reactor-netty 响应式编程组件,底层使用了 Netty 通讯框架
官网介绍
目前最新版本是3.1.0 地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
先看看具体介绍:
代码语言:javascript复制Spring Cloud Gateway is built on Spring Boot 2.x, Spring WebFlux, and Project Reactor
如何工作
常见疑问:
参考文章:https://zhuanlan.zhihu.com/p/437324151
网关是所有微服务的门户,路由转发仅仅是最基本的功能,除此之外还有其他的一些功能,比如:认证、鉴权、熔断、限流、日志监控等等
web请求通过一些匹配条件定位到真正的服务节点,并在这个转发前后进行一些精细化的控制,predicate(断言)就是匹配条件,精细化控制通过Fileter来控制
gateway的组成部分
路由(routes):gateway的基本构建模块。它由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由
断言
断言就是匹配条件,决定了HTTP请求应该由哪个Route来做路由,Predicate是Java 8中引入的一个新功能,就和我们平时在项目中写单元测试时用到的Assertion差不多,Predicate接收一个判断条件,返回一个ture或false,告知调用方判断结果
代码语言:javascript复制@FunctionalInterface
public interface Predicate<T> {
}
内置的断言工厂有哪些
过滤器
请求在路由转发前后对请求进行修改,例如Filter在路由之前(pre)可以进行参数校验、权限校验、流量监控、日志输出、协议转换等
网关作为一种微服务也要配置到注册中心(Eureka)
jar包的坐标
代码语言:javascript复制 <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
说明:gateway中不能添加spring-boot-starter-actuator和spring-boot-starter-web这两个jar
gateway中配置uri的三种方式:
1、ws(websocket)方式: uri: ws://localhost:9000 2、http方式: uri: http://localhost:8090/ 3、lb(注册中心中服务名字)方式: uri: lb://book-service
类名地址:org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties
Gateway是基于Webflux实现的,它通过扩展HandlerMapping与WebHandler来处理用户的请求,先通过Predicate定位到Router然后在经过FilterChain的过滤处理,最后定位到下层服务。同时官方给我们提供了许多Prdicate与Filter,比如说限流的。从这点来说它的功能比zuul还强大呢,zuul里有的服务发现,断路保护等,Gateway分别通过GlobalFilter与Filter来实现
handlerMapping根据用户请求找到执行该请求的controller