springcloud的网关-gateway

2022-06-14 16:04:10 浏览数 (1)

本文来回顾学习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

0 人点赞