Spring Cloud GatewaySpringCloud的全新子项目,该项目基于Spring5.xSpringBoot2.x技术版本进行编写,意在提供简单方便、可扩展的统一API路由管理方式。

概念解释:

    • Route(路由):路由是网关的基本单元,由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
    • Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:PathQueryMethodHeader等。
    • Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。

开始使用

Spring Cloud Gateway目前有两种方式进行配置:

  • application.yml配置文件方式
  • 通过@Bean注解 RouteLocator 方法返回值

 

route的组成部分

  • id:路由的ID
  • uri:匹配路由的转发地址
  • 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)的更多相关文章

  1. Spring Cloud Gateway Route Predicate Factory 的使用

    Spring Cloud Gateway的使用 一.需求 二.基本组成 1.简介 2.核型概念 1.Route 路由 2.Predicate 谓语.断言 3.Filter 过滤器 3.工作原理 三.网 ...

  2. 深入理解SpringCloud之Gateway

    虽然在服务网关有了zuul(在这里是zuul1),其本身还是基于servlet实现的,换言之还是同步阻塞方式的实现.就其本身来讲它的最根本弊端也是再此.而非阻塞带来的好处不言而喻,高效利用线程资源进而 ...

  3. SpringCloud组件及功能介绍

    1.什么是SpringClould?    SpringCloud是一个基于SpringBoot实现的微服务架构开发工具.它为微服务架构中涉及的配置管理.服务治理.断路器.智能路由.微代理.控制总线. ...

  4. 微服务介绍和springCloud组件

      微服务架构模式是:将整个web服务 组织成一系列小的web 服务,这些小的web服务可以进行独立的编译和部署,并通过各自暴露的API接口 进行相互通信,他们相互协作,作为一个整体,为客户提供服务功 ...

  5. 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

    [SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...

  6. SpringCloud之Gateway

    一.为什么选择SpringCloud Gateway而不是Zuul? Gateway和Zuul的职责一样,都承担着请求分发,类似Nginx分发到后端服务器. 1.SpingCloud Gateway ...

  7. 微服务SpringCloud之GateWay路由

    在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway.Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSo ...

  8. springcloud中gateway的实际应用

    之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...

  9. SpringCloud组件相关

    一.前言 原文地址:https://mp.weixin.qq.com/s/mwn2X0G9UgUDz1sgGgL1mA 认识我的朋友可能都知道我这阵子去实习啦,去的公司说是用SpringCloud(但 ...

随机推荐

  1. CentOS 7搭建本地yum源

    问题 CentOS7.1安装rpm包时提示缺失包,有些包iso里面也没有,只能从外网yum,这种情况下,可以提前yum好所需的依赖包,做成一个本地yum源.将这些文件拷贝到没联网的机器就可以使用了. ...

  2. kali修改配置文件后并保存

    vim是进入配置文件并修改 修改完按Esc进入控制模式,再:w保存 :wq是保存并退出

  3. 2020.11.30【NOIP提高A组】模拟赛反思

    90,rk42 T1 考试的时候觉得可以贪心,就每次找到最大的,然后以它为根去遍历每个子树,求出其最大值,然后删去这个点.一直持续直到边删完,时间复杂度\(O(n^2)\),然后想了想链的情况,没有打 ...

  4. 解决右键notepad++打开时提示, ShellExecute failed (2): Is this command correct?

    错误如下图: 解决方法: 右键notepad++.exe; 去掉管理员方式

  5. moviepy音视频剪辑:moviepy中的剪辑相关类及关系

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 y在 ...

  6. 第7.21节 Python抽象类—register注册虚拟子类

    上两节介绍了Python抽象类的真实子类的定义和使用,本节介绍另一种抽象类的实现方法:虚拟子类方法. 一.    相关概念 虚拟子类是将其他的不是从抽象基类派生的类"注册"到抽象基 ...

  7. 关于kettle前后无依赖项关系的解决办法

    前几日我发了一个关于从cube里提取数据的kettle流程图,当时我测试了是正确的.今天我将N个这样的流程放到一个job里批量处理的时候,错误出现了,纠结了很久.我始终无法理解为什么单独执行是正确的, ...

  8. ATT&CK 实战 - 红日安全 vulnstack (二) 环境部署(劝退水文)

    靶机下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/ 靶场简述 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习.视频教程.博 ...

  9. 性能测试学习之路 (四)jmeter 脚本开发实战(JDBC &JMS &接口脚本 & 轻量级接口自动化测试框架)

    1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交.   步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于 ...

  10. 百度前端技术学院-基础-day3

    2020.9.15 第三天的课程内容,复习了一些CSS的基础属性(果然不用就会忘). 学习了一些新的属性,比如text-shadow.text-indent(还不是很清楚).font-style等等. ...