springcloud组件gateway断言(Predicate)
2024-09-01 15:50:02
Spring Cloud Gateway
是SpringCloud
的全新子项目,该项目基于Spring5.x
、SpringBoot2.x
技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。
概念解释:
Route(路由)
:路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。Predicate(谓语、断言)
:路由转发的判断条件,目前SpringCloud Gateway
支持多种方式,常见如:Path
、Query
、Method
、Header
等。Filter(过滤器)
:过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。
开始使用
Spring Cloud Gateway
目前有两种方式进行配置:
application.yml
配置文件方式- 通过@Bean注解
RouteLocator
方法返回值
route
的组成部分
id
:路由的IDuri
:匹配路由的转发地址predicates
:配置该路由的断言,通过PredicateDefinition
类进行接收配置。- order:路由的优先级,数字越小,优先级越高。
Spring Cloud Gateway Predicates
每一个Predicate
的使用,你可以理解为:当满足这种条件后才会被转发
,如果是多个,那就是都满足的情况下被转发。
Path 方式匹配转发
我们在application.yml
配置文件内添加对应的路由配置,如下所示
spring:
application:
name: spring-cloud-gateway-sample
cloud:
gateway:
routes:
- id: blog
uri: http://blog.yuqiyu.com
predicates:
# 匹配路径转发
- Path=/api-boot-datasource-switch.html
# 端口号
server:
port: 9090
在上面的配置中,当访问http://localhost:9090/api-boot-datasource-switch.html
时就会被自动转发到http://blog.yuqiyu.com/api-boot-datasource-switch.html
,这里要注意完全匹配Path
的值时才会进行路由转发
,对应的 RouteLocator
方式该怎么进行配置
@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("blog", r ->
r.path("/api-boot-datasource-switch.html").uri("http://blog.yuqiyu.com"))
.build();
} id:blog
path:/api-boot-datasource-switch.html
uri:http://blog.yuqiyu.com
Host 方式匹配转发
Spring Cloud Gateway
可以根据Host
主机名进行匹配转发,如果我们的接口只允许**.yuqiyu.com
域名进行访问,那么配置如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri: http://blog.yuqiyu.com
predicates:
- Host=**.yuqiyu.com
对应的 RouteLocator
方式该进行配置
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.host("**.yuqiyu.com")
.uri("http://blog.yuqiyu.com")
.order(1)
.id("blog")
)
.build();
}
组合示例
相同的Predicate
也可以配置多个,请求的转发是必须满足所有的Predicate
后才可以进行路由转发,组合使用示例如下所示:
spring:
cloud:
gateway:
routes:
- id: blog
uri: http://blog.yuqiyu.com
predicates:
- Method=GET
- Host=**.yuqiyu.com
- Path=192.168.1.56/24
对应的 RouteLocator
方式该进行配置
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.host("**.yuqiyu.com")
.and().path("/api-boot-datasource-switch.html")
.and().method("GET")
.uri("http://blog.yuqiyu.com")
.order(1)
.id("blog")
)
.build();
}
最新文章
- 节省Json流量
- css挤带边框的三角
- Newtonsoft.Json 通过 JObject 读取 json对像 超简单
- Timer类和TimerTask类
- ubuntu下phpmyadmin配置
- 如何从NFS文件系统启动
- 实战Django:官方实例Part1
- MongoDB 学习笔记(一)基础篇
- hdu5514-Frogs(容斥原理)好题
- Skyline中使用AxTE3DWindowEx打开新的一个球体
- Js-Html 前端系列--显示有格式的文本
- 微信小程序开发之微信支付
- 团队作业4——第一次项目冲刺 tHe LaSt dAy
- vs code调试console程序报错--preLaunchTask“build”
- Django rest framework源码分析(1)----认证
- Kubernetes — 为什么我们需要Pod?
- mongo 更新字段值,若不存在则自动创建
- 新硬盘挂载-fdisk+mount案例实操
- 静态方法(staticmethod)和类方法(classmethod)
- Python Redis 管道
热门文章
- 网络拓扑实例之交换机处于同一网络作为DHCP中继与服务器(八)
- 2014_07_11_VGA基础及封装
- Android中Application的意义及使用方法
- 浅尝 Elastic Stack (二) Logstash
- 查询Oracle日志文件的方法
- OpenCV-Python setMouseCallback回调函数中图像变量img的传递方法解析
- opencv-python imread、imshow浏览目录下的图片文件
- PLSQL Developer 工具应用
- [GKCTF2020]cve版签到
- VS Code 搭建 Rust 开发环境