当前位置:首页 > 后端开发 > Gateway详解

Gateway详解

6个月前 (05-25)50

一、词汇表

  • 路由:是网关基本的模块,分别为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详解 _ Java侠

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

标签: Gateway

“Gateway详解” 的相关文章

spring cloud gateway自定义过滤器

spring cloud gateway自定义过滤器

在API网关spring cloud gateway和负载均衡框架ribbon实战文章中,主要实现网关与负载均衡等基本功能,详见代码。本节内容将继续围绕此代码展开,主要讲解sp...

Gateway网关简介及使用

Gateway网关简介及使用

Gateway网关简介及使用 1. 什么是 API 网关(API Gateway) 分布式服务架构、微服务架构与 API 网关 在微服务架构里,服务的粒度被进...

Spring Cloud 使用 GateWay

Spring Cloud 使用 GateWay

GateWay简介 Spring Cloud GateWay是Spring Cloud的一个全新项目,目标是取代Netflix Zuul,它基于Spring5.0+Sp...

Gateway实战:SpringCloud-Gateway组件使用

Gateway实战:SpringCloud-Gateway组件使用

1.什么是服务网关 1.说明 网关统一服务入口,可方便实现对平台众多服务...

微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理

微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理

目录 微服务网关 gateway 概述 路由器网关 Zuul 概述 嵌入式 Zuul 反向代理 ignored-services 不代理指定服务...

Spring - Spring Cloud Gateway网关实战及原理解析

Spring - Spring Cloud Gateway网关实战及原理解析

API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接...

Gateway是springcloud 的网管服务

网关的主要作用是 1,隐藏真正的域名和端口号 2,用路径匹配的方式。 3,可以添加过滤器 新建一个Gateway的项目 pom <...

Spring Cloud Alibaba - Gateway 入门案例(一)(网关介绍 / Gateway 介绍 / Gateway 快速入门(非阿里组件))

Spring Cloud Alibaba - Gateway 入门案例(一)(网关介绍 / Gateway 介绍 / Gateway 快速入门(非阿里组件))

Spring Cloud Alibaba - Gateway 入门案例(一)(网关介绍 / Gateway 介绍 / Gatewa...

Spring Cloud Gateway--网关路由

Spring Cloud Gateway--网关路由

先简单实现Spring Cloud Gateway的路由功能,感觉一下 1.创建Spring Boot 应用spring-cloud-gateway,添加起步依赖spr...

springboot+springcloud+gateway实现微服务网关管理

springboot+springcloud+gateway实现微服务网关管理

Spring Cloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架 1、什...