Gateway详解
一、词汇表
- 路由:是网关基本的模块,分别为id、目标uri、一组谓词+过滤器一起组合而成,如果谓词匹配成功,则路由匹配成功。
- 谓词:匹配Http请求参数
- 过滤器:对下游的服务器之前和之后实现处理。
二、过滤器举例
1.匹配时间之后
|
|
此路由与 2017 年 1 月 20 日 17:42 MountainTime(Denver)之后的所有请求相匹配。
2.匹配对应的host
|
|
访问 mete.tinner.com 转发到http://www.tinner.com/
3.权重谓词
|
|
根据权重比例实现转发,这条路线会将约80%的流量转发至http://www.tinner.com/yushengjun,并将约20%的流量转发至http://www.tinner.com。
…
还有更多,参考:官方文档
三、GateWay解决跨域的问题
解决跨域的问题
- 1.HttpClient转发
- 2.使用过滤器允许接口可以跨域 响应头设置
- 3.Jsonp 不支持我们的post 属于前端解决
- 4.Nginx解决跨域的问题保持我们域名和端口一致性
- 5.Nginx也是通过配置文件解决跨域的问题
- 6.基于微服务网关解决跨域问题,需要保持域名和端口一致性
- 7.使用网关代码允许所有的服务可以跨域的问题
- 8.使用SpringBoot注解形式@CrossOrigin
网关代码如下:
|
|
四、网关GateWay源码分析
- 1.客户端向网关发送Http请求,会到达
DispatcherHandler
接受请求,匹配到RoutePredicateHandlerMapping
。 - 2.根据RoutePredicateHandlerMapping匹配到具体的路由策略。
- 3.FilteringWebHandler获取的路由的GatewayFilter数组,创建 GatewayFilterChain 处理过滤请求执行我们的代理业务逻辑访问。
SpringBoot项目源码的入口
- 1.GatewayClassPathWarningAutoConfiguration—–>检查是否配置我们webfux依赖。
- 2.GatewayAutoConfiguration—–>核心配置类加载了我们Gateway需要的注入的类。
- 3.GatewayLoadBalancerClientAutoConfiguration—–>网关需要使用的负载均衡(Lb//“服务名” 根据服务名称查找真实地址)
- 4.GatewayRedisAutoConfiguration—–>网关整合Redis整合Lua实现限流
- 5.GatewayDiscoveryClientAutoConfiguration—–>服务注册与发现功能
注意:gateway启动时,对于一个请求默认会有8个过滤器进行装配。
作者:Tinner丶
来源链接:https://blog.csdn.net/qq_26707371/article/details/118528852