Gateway详解

一、词汇表

  • 路由:是网关基本的模块,分别为id、目标uri、一组谓词+过滤器一起组合而成,如果谓词匹配成功,则路由匹配成功。
  • 谓词:匹配Http请求参数
  • 过滤器:对下游的服务器之前和之后实现处理。

二、过滤器举例

1.匹配时间之后
1
2
3
4
5
- id: mayikt
uri: http://www.mayikt.com/
###匹配规则
predicates:
- After=2017-01-20T17:42:47.789-07:00[America/Denver]

此路由与 2017 年 1 月 20 日 17:42 MountainTime(Denver)之后的所有请求相匹配。

2.匹配对应的host
1
2
3
4
5
- id: meite
uri: http://www.tinner.com/
###匹配规则
predicates:
- Host=meta.tinner.com

访问 mete.tinner.com 转发到http://www.tinner.com/

3.权重谓词
1
2
3
4
5
6
7
8
- id: weight_high
uri: http://www.tinner.com/yushengjun
predicates:
- Weight=group1, 2
- id: weight_low
uri: http://www.tinner.com
predicates:
- Weight=group1, 1

根据权重比例实现转发,这条路线会将约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

网关代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*/
@Component
public class CrossOriginFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
HttpHeaders headers = response.getHeaders();
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "POST, GET, PUT, OPTIONS, DELETE, PATCH");
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
return chain.filter(exchange);

}
}

四、网关GateWay源码分析

  • 1.客户端向网关发送Http请求,会到达DispatcherHandler接受请求,匹配到RoutePredicateHandlerMapping
  • 2.根据RoutePredicateHandlerMapping匹配到具体的路由策略。
  • 3.FilteringWebHandler获取的路由的GatewayFilter数组,创建 GatewayFilterChain 处理过滤请求执行我们的代理业务逻辑访问。
    Gateway详解1
SpringBoot项目源码的入口
  • 1.GatewayClassPathWarningAutoConfiguration—–>检查是否配置我们webfux依赖。
  • 2.GatewayAutoConfiguration—–>核心配置类加载了我们Gateway需要的注入的类。
  • 3.GatewayLoadBalancerClientAutoConfiguration—–>网关需要使用的负载均衡(Lb//“服务名” 根据服务名称查找真实地址)
  • 4.GatewayRedisAutoConfiguration—–>网关整合Redis整合Lua实现限流
  • 5.GatewayDiscoveryClientAutoConfiguration—–>服务注册与发现功能

注意:gateway启动时,对于一个请求默认会有8个过滤器进行装配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Gateway是一个基于Spring Cloud的微服务网关,用于构建高效、可靠的微服务架构。它提供了一种简单而强大的方式来路由、过滤和转换请求,帮助开发者构建弹性、可扩展的微服务应用。 Spring Cloud Gateway的功能和工作原理可以通过以下几点来详解: 1. 网关功能:Spring Cloud Gateway作为一个API网关,具有路由、过滤和转发请求的功能。它可以根据请求的URL、请求头、请求参数等信息,将请求转发到不同的微服务实例上。 2. 网关路由:Spring Cloud Gateway支持基于路由规则的请求转发。开发者可以通过配置路由规则,将特定的请求路径映射到相应的微服务实例上。这样可以实现负载均衡、服务发现等功能。 3. 网关过滤:Spring Cloud Gateway支持请求过滤器,可以在请求到达网关之前或之后对请求进行一系列操作。开发者可以根据需要添加自定义的过滤器,实现请求认证、请求转换、请求限流等功能。 4. 响应式框架:Spring Cloud Gateway基于Spring WebFlux框架,采用异步非阻塞的方式处理请求。这使得网关在高并发场景下具备更好的性能和吞吐量。 总之,Spring Cloud Gateway是一个功能强大的微服务网关,可以作为微服务架构的入口,实现请求的路由、过滤和转发。它采用响应式框架来处理请求,具备高并发和可扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【SpringCloud】SpringCloud原理之Gateway网关](https://blog.csdn.net/twotwo22222/article/details/129428040)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SpringCloud Gateway 详解](https://blog.csdn.net/m0_51111980/article/details/128022758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值