springcloud组件gateway断言(Predicate)
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();
}
springcloud组件gateway断言(Predicate)的更多相关文章
- Spring Cloud Gateway Route Predicate Factory 的使用
Spring Cloud Gateway的使用 一.需求 二.基本组成 1.简介 2.核型概念 1.Route 路由 2.Predicate 谓语.断言 3.Filter 过滤器 3.工作原理 三.网 ...
- 深入理解SpringCloud之Gateway
虽然在服务网关有了zuul(在这里是zuul1),其本身还是基于servlet实现的,换言之还是同步阻塞方式的实现.就其本身来讲它的最根本弊端也是再此.而非阻塞带来的好处不言而喻,高效利用线程资源进而 ...
- SpringCloud组件及功能介绍
1.什么是SpringClould? SpringCloud是一个基于SpringBoot实现的微服务架构开发工具.它为微服务架构中涉及的配置管理.服务治理.断路器.智能路由.微代理.控制总线. ...
- 微服务介绍和springCloud组件
微服务架构模式是:将整个web服务 组织成一系列小的web 服务,这些小的web服务可以进行独立的编译和部署,并通过各自暴露的API接口 进行相互通信,他们相互协作,作为一个整体,为客户提供服务功 ...
- 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
[SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...
- SpringCloud之Gateway
一.为什么选择SpringCloud Gateway而不是Zuul? Gateway和Zuul的职责一样,都承担着请求分发,类似Nginx分发到后端服务器. 1.SpingCloud Gateway ...
- 微服务SpringCloud之GateWay路由
在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway.Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSo ...
- springcloud中gateway的实际应用
之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...
- SpringCloud组件相关
一.前言 原文地址:https://mp.weixin.qq.com/s/mwn2X0G9UgUDz1sgGgL1mA 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但 ...
随机推荐
- presto 访问kudu 多schemas配置
presto需要访问kudu数据源,但是impala可以直接支持多数据库存储,但是presto不能原生支持,按照presto的官网设置了然而并不起作用. 官方文档: 到官方github提问了,然后并没 ...
- Netty 心跳处理
传统的心跳包设计,基本上是服务端和客户端同时维护 Scheduler,然后双方互相接收心跳包信息,然后重置双方的上下线状态表.此种心跳方式的设计,可以选择在主线程上进行,也可以选择在心跳线程中进行,由 ...
- .Net Core JWT 动态设置接口与权限
通过上一篇.Net Core官方的 JWT 授权验证学习到了JWT的授权.可以发现一个问题,就是如果每个接口可以使用的角色都是写死的,这样如果有所修改会非常麻烦,虽然用policy可以一定程度上缓解, ...
- 第6.5节 exec函数:一个自说自话的强大Python动态编译器
在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码. 一. 语法 1. exec(Code, globals=None, local ...
- 第13.1节 关于Python的异常处理
Python的异常网上有很多资料介绍,老猿就不再细说,在这里老猿只挑几件老猿认为重要的内容介绍一下. 一. 异常处理完整语法 异常处理的完整语法语法如下: try: - except (异常1,-,异 ...
- SASRec 实践
SASRec--2018,ICDM,论文<Self-Attentive Sequential Recommendation> 源代码链接:https://github.com/kang20 ...
- python学生管理名片
name=['刘备','关羽','张飞','赵云','马超'] print('名片管理系统1.0\n1.增加一个新的名片\n2.删除一个名片\n3.修改一个名片\n4.查找一个名片\n5.退出名片管理 ...
- 【题解】「P1504」积木城堡
这题是01背包(\(DP\)) 如何判断要拆走那个积木,首先定义一个\(ans\)数组,来存放这对积木能拼成多高的,然后如果\(ans_i = n\)那么就说明这个高度的积木可以. 话不多说,上代码! ...
- windows 远程连接报错
在windows7上或者windows10上远程连接服务器报错("连接错误"),试了网上的方法,发现是服务器安装ssl证书关闭了ssh服务,开启ssh服务后,重启电脑就可以解决这个 ...
- 什么叫做ECS云服务器?
什么是ECS云服务器,阿里ECS云服务器与虚拟主机的区别是什么.以前,ECS云服务器还不带"云"字,只是叫做"服务器",毫无疑问"ECS云服务器&qu ...