- spring cloud gateway 基于 spring boot 2, 是 spring cloud 的 全新 项目, 该项 目 提供 了 一个 构建 在 spring 生态 之上 的 api 网关
- spring cloud gateway 旨在 提供 一种 简单 而 有效 的 途径 来 转发 请求, 并为 它们 提供 横 切 关注 点, 例如: 安全性、 监控/ 指标 和 弹性
- 性能比较高, 是第一代网关zuul的1.6倍
- 功能强大, 内置了很多功能,转发/监控/限流
- 容易扩展
- 实现依赖netty和webflux,不是传统的servet模型
- 不能将其部署在tomcat,jetty等servelt容器当中,只能打成jar包执行
- 需要springboot2.0及以上版本才支持
route路由
路由网关的基本构建块。 它由id,目标uri,谓词集合和过滤器集合定义。 如果聚合谓词为真,则匹配路由
predicate谓词
对请求的内容进行匹配,条件筛选
filter过滤器
可以对请求进行过滤,在发送下游请求之前或之后修改请求和响应
<dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-gateway</artifactid> </dependency> <dependency> <groupid>io.projectreactor.netty</groupid> <artifactid>reactor-netty</artifactid> <version>0.9.4.release</version> </dependency> </dependencies>
server: port: 9000 spring: application: name: api-gateway #此实例注册到eureka服务端的name cloud: gateway: routes: #当请求满足要求时,转发到指定的服务当中 - id: goods_route #唯一标识,默认是uuid uri: http://www.lhsxpumps.com/_localhost:8000/ #请求要转发的地址 order: 1 #路由优先级 越小, 优先级越高 predicates: #谓词,断言(条件判断 转发请求要满足什么条件) - path=/api/** #当路径中有指定内容时, 才会转发到指定uri filters: #过滤器,拦截请求做一些额外处理 - stripprefix=1 #去掉添加的path内容
运行访问http://localhost:9000/api/服务地址
<dependency> <groupid>com.alibaba.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid> </dependency>
@enablediscoveryclient
discovery: locator: enabled: true #从nacos当中获取服务信息
- 用于对请求进行判断 ,只有断言都返回值,才会真正的执行路由
- 满足条件,才能进行过滤,转发
判断请求日期是否晚于指定的日期
参数:传递一个日期
示例
2. beforeroutepredicatefactory
判断请求日期是否早于指定日期
参数:传递一个日期
判断请求日期是否在指定日期之间
参数:传递两个日期
remoteaddrroutepredicatefactory
判断请求主机地址是否在指定地址段时 参数:ip地址段
cookieroutepredicatefactory
判断请求cookie是否具有给定名称且值与正则表达式匹配
参数:cookie名称 , 正则表达式
示例
- cookie=mycookname,[^gao]
headerroutepredicatefactory
判断请求header是否具有给定名称且值与正则表达式匹配
参数:标题名称 , 正则表达式
示例:
- header=request-id,\d+
hostroutepredicatefactory
判断请求的host是否满足匹配条件
参数:主机名模式
示例
- host=**.testhost.org
methodroutepredicatefactory
判断请求类型是否为指定的类型
参数:请求类型
示例
-method=get
queryrouterpredicatefactory
判断请求参数是否具有给定名称且值与正则表达式匹配 参数:请求参数名,正则表达式
示例
基于权重的断言工厂
weightroutepredicatefactory
对于同一组内容的路由,按权重进行转发
参数 : 组名,权重
示例
- 两个对于 / weight/** 路径转发的路由定义,这两个路由是同一个权重分组,且 weight_ route1 权重为 1,
- weight_ route2 权重为9 对于10个访问/ weight/** 路径的请求来说,将会有9个路由到 weight_ route2,1个路由到 weight_ route1
在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等
在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等
举例:
介绍:
所有请求的调度器,负载请求分发
路由谓语匹配器,用于路由的查找,以及找到路由后返回对应的webhandler,
ispatcherhandler会依次遍历handlermapping集合进行处理
使用filter链表处理请求的webhandler, routepredicatehandlermapping找到路由后返回对应的filteringwebhandler对请求进行处理,filteringw
ebhandler负责组装filter链表并调用链表处理请求。
如对本文有疑问, 点击进行留言回复!!
详解SpringBoot修改启动端口server.port的四种方式
网友评论