SpringCloud-Gateway
概述
系统唯一对外的入口,介于客户端和服务端之间的中间层,处理非业务功能,提供路由请求、鉴权、监控、缓存、限流等功能。
统一接入
- 智能路由
- AB测试、灰度测试
- 负责均衡,容灾处理
- 日志埋点
流量监控
- 限流处理
- 服务降级
安全防护
- 鉴权处理
- 监控
- 网络隔离
AlibabaCloud全家桶还没对应的网关,用SpringCloud官方推荐的Gateway。
gateway:
routes: #数组形式
- id: xx-service #路路由唯⼀一标识
uri: http://127.0.0.1:8000 #想要转发到的地址
order: 1 #优先级,数字越⼩小优先级越⾼高
predicates: #断⾔言 配置哪个路路径才转发
- Path=/xx-server/**
filters: #过滤器器,请求在传递过程中通过滤器器修改
- StripPrefix=1 #去掉第⼀一层
整合Nacos
spring:
application:
name: api-gateway
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes: #数组形式
- id: yy-service #路由唯一标识
#uri: http://127.0.0.1:8000 #想要转发到的地址
uri: lb://xx-service #从nocas进行转发
order: 1 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发
- Path=/order-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀
discovery:
locator:
enabled: true #开启网关拉取nacos的服务
Gateway配置项
路由
Route,网关基本单元,由ID、URI、一组Predicate、一组Filter
- route组成部分
- id:路路由的ID
- uri:匹配路路由的转发地址
- predicates:配置该路路由的断言,通过
- PredicateDefinition类进行接收配置。
- order:路路由的优先级,数字越小,优先级高。
Predicates
- 来源Java8,接受参数返回boolean
- 支持Path、Query、Method、Header的匹配规则
- 支持多个Predicate请求的转发是必须满足所有的Predicate才能路由转发
网关鉴权
网关不要加太多业务逻辑,否则会影响性能
chain.filter(exchange)