栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud gateway 知识汇总

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud gateway 知识汇总

背景

SpringCloud 的 gateway 是基于 webflux 实现的 API 网关服务,本文汇总网关相关的知识。

经典流程图

网关服务是位于 SpringCloud 端服务之前的一个模块,充当后端服务的门户:

到处都能看到的经典流程图:

主要组件

网关服务有三大组件:

  1. 路由:对应 yml 中的 routes 配置,包含四部分 id,uri,predicates,filters 。
  2. 谓词:predicate ,内置 11 种,对应路由的 predicates 配置。
  3. GatewayFilter:拦截器,对应路由的 filters 配置。

路由配置filters 的 RewritePath 属性时常见的路径替换正则解释 参考文档。

常见 demo 是这样的:

filters:
   RewritePath=/mydata/(?.*), /${segment}

它的作用是将元素请求种 mydata 这部分路径去掉,(?.*) 是一个命名分组。

谓词 predicate 对应的 11 种内置谓词。

GatewayFilter
  1. 自定义 Filter 及引用规则:默认可只简写 GatewayFilterFactory 之前的部分。
  2. 获取网关真实 IP 的用法 参考文档
    在自定义 Filter 获取到数据后可以从 exchange 种得到:
public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
     return chain.filter(exchange).then().then(Mono.fromRunnable(() -> {
         // 真实的 IP,可以全局缓存
		 URI uri = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
           chain.filter(exchange);
        }));
 }
  1. 相互关联的两次请求,要保证都被转发到同一个后端主机的话,如何处理?结合第一步将其缓存,然后在另外的 Filter 中重置 URL:
Map attributes = exchange.getAttributes();
 // 使用与前一个请求一样的主机和端口
url = url.concat(request.getPath().value());
// 重置网确请求 URL ,保证后面的转发与前面的请求是由同一个主机
attributes.put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, new URI(url));
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337812.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号