详细讲解了Gateway网关的工作原理和使用方法,对大家的学习或工作都有一定的参考价值,有需要的朋友可以参考一下。
: 目录
1.什么是API网关分布式服务架构、服务架构和API网关API网关定义API网关功能API网关分类和功能2。什么是网关3。为什么要用gateway 4最重要的概念。如何通过时间匹配、Cookie匹配、主机匹配、请求匹配、请求路径匹配、请求参数匹配、请求ip地址匹配、组合使用来使用网关
1. 什么是 API 网关(API Gateway)
分布式服务架构、微服务架构与 API 网关在微服务架构中,服务的粒度进一步细分,每个业务服务都可以独立设计、开发、测试、部署和管理。此时,每个独立的部署单元可以由不同的开发和测试团队维护,可以由不同的编程语言和技术平台设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元之间的通信方式。
API 网关的定义网关被用作API架构来保护、增强和控制对API服务的访问。
网关是先于应用或服务(提供REST API接口服务)的系统,用于管理授权、访问控制、流量限制等。这样REST API接口服务受到API网关的保护,对所有调用者都是透明的。因此,隐藏在API网关后面的业务系统可以专注于创建和管理服务,而不是处理这些战略基础设施。
API 网关的职能API 网关的分类与功能2. Gateway是什么
Spring Cloud Gateway是Spring基于Spring 5.0、Spring Boot 2.0、Project Reactor等技术开发的官方网关。Spring Cloud Gateway旨在为微服务架构提供简单有效的统一API路由管理方法。作为Spring Cloud生态系统中的网关,Spring Cloud Gateway旨在取代ZUUL,不仅提供统一的路由方式,还提供基于过滤链的网关基本功能,如安全、监控/掩埋、限流等。
3. 为什么用Gateway
Spring Cloud Gateway可以看作是Zuul 1.x的升级版和换代产品,比Zuul 2更早使用Netty实现异步IO,从而实现了比Zuul 1.x更简单、更高效的API网关,并与Spring Cloud紧密配合。
Spring Gateway中路由器和过滤器有明显的区分,而且一大特点是内置了很多开箱即用的功能,可以通过SpringBoot配置或者手工编码链式调用来使用。
比如内置了10种路由器,这样我们就可以直接配置,按照头,或者路径,或者主机,或者查询任意路由。
比如区分了通用滤镜和全局滤镜,内置了20种滤镜和9种全局滤镜,也可以直接使用。当然自定义滤镜也很方便。
最重要的几个概念4. Gateway怎么用
说白了,predict就是实现一套匹配规则,让请求能够过来,找到相应的路由进行处理。接下来,我们将使用Spring Cloud GateWay内置的几种预测。
通过时间匹配谓词支持设置时间。当请求被转发时,可以通过判断在这个时间之前或之后转发。比如我们现在设置2019年1月1日只转发到我的网站。如果在此之前我们没有转发它,我可以这样配置它:
春天:
云:
网关:
路线:
- id:时间路线
尤里:http://ityouknow.com
谓词:
-After=2018-01-20t 06:06:06 08:00[亚洲/上海]
Spring通过ZonedDateTime比较时间。ZonedDateTime是一个类,用于在Java 8中用时区表示日期和时间信息。ZonedDateTime支持按时区设置时间。中国的时区是亚洲/上海。
After Route谓词意味着在此时间之后的所有请求都被转发到目的地址。上面的例子意味着所有请求时间为2018年1月20日6: 6: 6的请求都被转发到地址http://ityouknow.com。08:00是指时间与UTC时间相差八小时,时区为亚洲/上海。
添加路由规则后,访问地址http://localhost:8080将自动转发到http://ityouknow.com。
相反,在路由谓词之前,某个时间之前的所有请求都会被转发。我们将上述路由规则中的After改为Before,如下所示:
春天:
云:
网关:
路线:
- id:路线之后
尤里:http://ityouknow.com
谓词:
-Before=2018-01-20t 06:06:06 08:00[亚洲/上海]
这意味着您可以在此时间之前进行布线,在此时间之后停止布线,并在修改后重新启动项目。再次访问地址http://localhost:8080,页面会报告404没有找到地址。
除了before或after time之外,Gateway还支持在一定时间段内限制路由请求,这可以通过使用Between Route谓词来实现。
春天:
云:
网关:
路线:
- id:路线之后
尤里:http://ityouknow.com
谓词:
-Between=2018-01-20t 06:06:06 08:00[亚洲/上海],2019-01-20t 06:06:06 08:00[亚洲/上海]
这个设置意味着这条路由在这个时间段内可以匹配,超过这个时间段就不匹配了。按时间匹配路由的功能很酷,可以用在限时抢购的一些场景中。
通过 Cookie 匹配RoutePredicate可以接收两个参数,一个是Cookie名称,一个是正则表达式。通过获得相应的Cookie名称值和正则表达式,路由规则将匹配。如果匹配,则执行路由,如果不匹配,则不执行路由。
春天:
云:
网关:
路线:
- id: cookie_route
尤里:http://ityouknow.com
谓词:
- Cookie=ityouknow,kee
使用curl test,命令行输入:
curl http://localhost:8080-cookie ityouknow=kee . e
将返回页面代码。如果cookie it you know=kee.e 被删除,后台将报告404错误。
与Cookie路由谓词一样,头谓词也接收两个参数,头中的一个属性名和一个正则表达式。如果属性值与正则表达式匹配,它将被执行。
春天:
云:
网关:
路线:
- id:标题_路线
尤里:http://ityouknow.com
谓词:
-Header=X-请求Id,d
使用curl test,命令行输入:
curl http://localhost:8080-H X-Request-Id:666666
返回页面代码证明匹配成功。当参数-h x-request-id: 66666 改为-H X-Request-Id:neo 再次执行时,会返回404证明没有匹配。
通过 Host 匹配主机路由谓词接收一组参数和一个匹配域名列表。这个模板是一个ant分隔的模板,带有。作为分隔符签名。它使用参数中的主机地址作为匹配规则。
春天:
云:
网关:
路线:
- id:主机路由
尤里:http://ityouknow.com
谓词:
- Host=**.ityouknow.com
使用curl test,命令行输入:
curl http://localhost:8080-H Host:www . ityouknow . com
curl http://localhost:8080-H Host:MD . ityouknow . com
经过测试,上述两台主机可以匹配host_route路由。如果删除主机参数,将会报告404错误。
通过请求方式匹配路由可以通过不同的请求方法完成,如POST、GET、PUT、DELETE等。
春天:
云:
网关:
路线:
- id:方法路线
尤里:http://ityouknow.com
谓词:
- Method=GET
使用curl test,命令行输入:
默认情况下,GET请求# curl。
curl本地主机:8080
返回测试页面代码,证明与路由匹配,然后我们会以POST的形式请求测试。
默认情况下,GET请求# curl。
curl -X POST http://localhost:8080
Return 404未找到,证明上层路由没有匹配。
通过请求路径匹配路径路由谓词接收与路径匹配的参数,以确定是否要走过。
春天:
云:
网关:
路线:
- id:主机路由
尤里:http://ityouknow.com
谓词:
- Path=/foo/{segment}
如果请求的路径符合要求,这个路由将匹配,例如:/foo/1或/foo/bar。
使用curl test,命令行输入:
curl本地主机:8080/foo/1
curl http://localhost:8080/foo/xx
curl http://localhost:8080/boo/xx
测试完第一个和第二个命令后,可以正常获取页面返回值,最后一个命令消息404证明该路由与指定路由匹配。
通过请求参数匹配QueryPredicate支持传入两个参数,一个是属性名,一个是属性值,可以是正则表达式。
春天:
云:
网关:
路线:
- id:查询路线
尤里:http://ityouknow.com
谓词:
-查询=微笑
这样,只要请求中包含smile属性的参数,就可以匹配路由。
使用curl test,命令行输入:
curl localhost:8080?微笑=xid=2
经过测试发现,只要请求摘要有smile参数就会匹配路由,没有smile参数就不会匹配。
也可以把Query的值配置成键值对,这样当请求来的时候,属性值就会和正则匹配,请求来的时候就会走的路径。
春天:
云:
网关:
路线:
- id:查询路线
尤里:http://ityouknow.com
谓词:
- Query=keep,pu。
这样,只有当请求包含keep属性,且参数值是以pu开头的三位数字符串时,才会进行匹配和路由。
使用curl test,命令行输入:
curl localhost:8080?keep=pub
可以测试一下返回页面代码,把keep的属性值改成pubx,再次访问时它会报错404,证明路由需要匹配正则表达式才能路由。
通过请求 ip 地址进行匹配谓词还支持具有特定ip间隔号段的请求可以被路由。RemoteAddr路由谓词接受cidr符号(IPv4或IPv6)字符串列表(最小长度为1),例如192.168.0.1/16(其中192.168.0.1是IP地址,16是子网掩码)。
春天:
云:
网关:
路线:
- id:远程地址路由
尤里:http://ityouknow.com
谓词:
- RemoteAddr=192.168.1.1/24
您可以将此地址设置为测试用机器的ip地址。
如果请求的远程地址是192.168.1.10,此路由将匹配。
组合使用为了演示上面每个谓词的用法,我们单独进行配置测试,但是我们实际上可以将各种谓词组合在一起使用。
例如:
春天:
云:
网关:
路线:
-id:host _ foo _ path _ headers _ to _ http bin
尤里:http://ityouknow.com
谓词:
- Host=**.foo.org
- Path=/headers
- Method=GET
-Header=X-请求Id,d
- Query=foo,ba。
- Query=baz
-曲奇=巧克力,中国
-After=2018-01-20t 06:06:06 08:00[亚洲/上海]
当各种谓词同时存在于同一条路由中时,请求必须同时满足所有条件才能被这条路由匹配。
当一个请求满足多个路由的谓词条件时,该请求将只由第一个成功匹配的路由转发。
关于Gateway网关的工作原理和使用方法,本文到此为止。希望对大家的学习有帮助,也希望大家多多支持。