springcloud gateway
springcloud gateway什么是网关鉴权、限流、日志、负载、降级、健康检查,和业务逻辑贴合紧密,可称作业务网关;一般都集成单点登录、jwt、会话认证、集中鉴权;底层实现netty,普通主机连接数1w,消耗业务线程先用ng控流,再用业务网关接cloud响应数据过网关吗?gateway过网关只有lvs的dr模型不过网关;区别zuul1.0架构图zuul2.0架构图基于netty基本使用断言
springcloud gateway
什么是网关
鉴权、限流、日志、负载、降级、健康检查,和业务逻辑贴合紧密,可称作业务网关;
一般都集成单点登录、jwt、会话认证、集中鉴权;
底层实现
netty,普通主机连接数1w,消耗业务线程
先用ng控流,再用业务网关接cloud
响应数据过网关吗?
gateway过网关
只有lvs的dr模型不过网关;
区别
zuul1.0架构图
zuul2.0架构图
基于netty
基本使用
断言
客户端请求时候,路由时候如何匹配请求?
用什么方式,匹配什么规则。
path断言匹配
predicates:
- Path=/mg/**
Query断言
predicates:
- Query=foo,ba.
method断言
predicates:
- Method=get
Host断言
predicates:
- Host=mashibing.com
header断言
cookie断言
gateway返回请求给客户端写个标记,意思是下次你还找我,这样有利于会话保持;
predicates:
- Cookie=name,yiming
基本路由的配置
最简单手工配置转发
path+query组合断言两级
先进行path断言,通过后在query断言,一个.就是至少有一个(可以换成正则)
整合Eureka
把gateway整合eureka,注册成eureka客户端;
locator开启后就从注册中心里拿服务起起规则是服务的名字;
locator拿到的是服务名+ip地址,给我们自动选一个转发过去;
把业务服务也注册到eureka;
自定义负载均衡(底层用ribbon负载)
比如MDB服务名不优雅,想用mangodb代替转发;
自定义负载规则
定义gateway配置文件配置MDB服务下ribbon下负载均衡策略为自定义的类,就不读默认的负载策略;
自定义负载策略类,集成类重2个方法,chose是负载方法,第二个是配置方法
过滤器(权限、限流)
用户请求到gateway里内部有很多filter
Mono:可变长度的数据序列
自定义过滤器(全局)
order代表当前filter类执行优先级,数组小优先级高;
过滤器的GatewayFilterChain 执行顺序:
- 通过 GatewayFilter集合构建顶层的 GatewayFilterChain
- 调用顶层 GatewayFilterChain,获取第一个Filter,并创建下一个 Filter索引对应的 GatewayFilterChain
- 调用filter的filter方法执行当前filter,并将下次要执行的filter对应GatewayFilterChain传入。
filter应用
如:写多个filter类,验证token的filter类优先级0,权限filter类优先级2;
场景:
也可以在gateway的filter里做缓存操作,有缓存就不请求service
service服务,基于业务逻辑二次开发
使用webflux
更多推荐
所有评论(0)