曾梦想执剑走天涯,我是程序猿【AK】
简述概要
了解SpringCloud Gateway微服务网关
知识图谱
什么是SpringCloudGateway
- Spring Cloud官方推出的第二代网关框架,定位于取代Netflix Zuul。相比Zuul来说,Spring Cloud Gate提供更优秀的性能,更强大的功能。(Zuul1.x是同步阻塞的设计,性能低,但2.x版本也基于Netty,zuul2.x版本与springcloudgateway性能差距其实不大)
- 由WebFlux+Netty+Reactor实现的响应式的API网关。它不能在传统的servlet容器中工作,也不能构建成war包。
- 目的为微服务架构提供一种简单且有效的API路由的管理方式,并给予Fliter的方式提供网关的基本功能,例如安全认证、监控、限流等。
功能特征
- 基于 Spring 框架和 Spring Boot 构建
- 能够匹配任何请求属性上的路由。
- 谓词(Predicate)和过滤器(Fliter)特定于路由。
- 断路器集成(Sentinel、Hystrix)
- Spring Cloud Discovery客户端集成(Nacos、Eruka)
- 易于编写谓词和过滤器
- 请求速率限制
- 路径重写
应用场景
全局性流控
日志统计
防止SQL注入
防止Web攻击
屏蔽工具扫描
黑白IP名单
证书加解密处理
服务级别流控
服务降级与熔断
路由与负载均衡、灰度策略
服务过滤、聚合与发现
权限验证与用户等级策略
业务规则与参数检验
多级缓存策略
核心概念
- 路由(route)
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成、如果断言为真则说明请求的URL和配置的路由匹配。
- 断言(predicates)
Java8中的断言函数,SpringCloudGateway中的断言函数类型是spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。
- 过滤器(Filter)
SpringCloudGateway中的filter分为Gateway Filter和Global Fliter、Filter可以对请求和响应进行处理。
配置文件
spring:
cloud:
# Spring Cloud Gateway 配置项,对应 GatewayProperties 类
gateway:
# 路由配置项,对应 RouteDefinition 数组
routes:
## 各个微服务
- id: system-admin-api # 路由的服务唯一编号
uri: grayLb://system-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
- Path=/admin-api/system/**
filters:
- RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
- id: system-app-api # 路由的编号
uri: gr