欢迎大家来到IT世界,在知识的湖畔探索吧!
Gateway服务网关概述
1. Gateway简介
Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Reactor等技术开发的网关
Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL
Reactor 模式是一种典型的事件驱动的编程模型
Gateway解决了哪些问题
Gateway主要解决了路由转发、限流、熔断、权限功能。
Gateway构建方式
- 代码实现(不推荐)
- 配置文件实现(推荐)
2. Gateway工作流程
思考:
不使用网关,直接访问各个微服务可以吗?
使用网关
Gateway核心概念介绍
1、核心概念
- Route (路由)
- Route 是网关的基础元素,由 ID、目标 URI、断言、过滤器组成。
- 当请求到达网关时,由 Gateway Handler Mapping 通过断言进行路由匹配(Mapping),当断言为真时,匹配到路由。
- Predicate(断言)
- Predicate 是 Java 8 中提供的一个函数。
- 它允许开发人员匹配来自 HTTP 的请求,简单来说它就是匹配条件。
- Filter (过滤器)
- 过滤器作为网关的其中一个重要功能,就是实现请求的鉴权。
- Gateway自带过滤器有很多,常见自带过滤器有:
网关使用场景:
- 请求鉴权:如果没有访问权限,直接进行拦截
- 异常处理:记录异常日志
- 服务调用时长统计
2. 过滤器配置
Gateway有两种过滤器
- 局部过滤器:只作用在当前配置的路由上。
- 全局过滤器:作用在所有路由上。
配置全局过滤器步骤(此处配置AddResponseHeader,具体参照上面的表格):
1)修改application.yml文件
2) 浏览器输入 http://localhost:8081/demo/hi,F12查看响应头信息
Gateway断言工厂介绍
1. After路由断言
After 路由可配置一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之后会成功匹配,才交给 route去处理。
2. Between路由断言
Between路由断言工厂接受两个参数,datetime1和datetime2。
匹配发生在datetime1与datetime2之间请求。
3. Header路由断言
Header由断言工厂接受两个参数,头名称和正则表达式。
给定名称的头匹配,该值与正则表达式匹配。
4. Cookie路由断言
Cookie路由断言工厂接受两个参数: 【Cookie=cookie名, cookie值的正则表达式规则】
cookie配置成功则进行路由
5. Host 路由断言
Host路由断言工厂接受一个参数:需要一个参数即hostname。它可以使用. * 等去匹配host。
这个参数会匹配请求头中的host的值,一致,则请求正确转发。
6. Method 路由断言
Method路由断言工厂接受一个参数:HTTP方法来匹配。
7. Path 路由断言
Path路由断言工厂接受一个参数:采用Spring PathMatcher 模式
8. Query路由断言
Query路由断言工厂接受两个参数:配置说明:【Query=参数名,参数值】
如果请求的参数包含name=zhangsan则成功路由
9. RemoteAddr路由断言
支持通过设置某个 ip 区间号段的请求才会路由
组合使用
GateWay 内部提供了很多种灵活的路由转发规则,在同一个路由内存在多个 Predicate 时,同时满足规则后,请求才会被路由转发。
Gateway网关快速入门
Gateway智能路由
本章节场景:
我们将建立三个Module,父项目是itheima-service-gateway,里面没有任何代码,它用来管理我们的聚合工程。
具体场景:
将service-order、service-payment、service-gateway注册到Nacos,通过service-gateway网关服务调用
1.创建Gateway模块
创建service-gateway模块,端口8081,作为服务网关
2. 引入起步依赖
3. 修改application.yml文件
4. 启动入口类
5. 启动
分别启动service-order、service-payment、service-gateway注册到Nacos
6. 访问
1) 不使用网关访问service-order服务
2) 使用网关访问service-order服务
由此可见,我们使用http://localhost:8081/czbk/v1/order/create访问网关,也同样输出了HI,itheima ,创建订单成功>>>>>port:8762
那是因为我们的网关服务service-gateway配置文件application.yml文件中配置了路由转发功能;核心的参数为
url为指向注册中心的服务,主要是从我们的注册中心获取服务,注册中心可以是多种类型Consul或者Zookeeper
Path为转发路径
在上面的配置中,配置了一个Path 的predict,将以/czbk/v1/order/**开头的请求都会转发到uri:lb://service-order 的地址上, lb://service-order即service-order服务的负载均衡地址,并用StripPrefix的filter 在转发之前将/czbk去掉
Gateway过滤器
spring cloud Gateway网关过滤器类型主要分:全局和局部过滤器
1、全局过滤器
GlobalFilter :全局过滤器,对所有的路由均起作用无需任何配置文件配置就可以起到过滤器的作用
全局默认过滤器
配置方式
2、局部过滤器
GatewayFilter :只对指定的路由起作用
一种是直接 实现GatewayFilter, Ordered接口,另一种是 继承AbstractGatewayFilterFactory类
可以通过下面的方式配置
注意:
下面的 – RequestTime=true的RequestTime
对应它的类名RequestTimeGatewayFilterFactory
全局过滤器代码
不加token访问
加入token
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22709.html