本文旨在介绍After(Before)路由断言工厂使用,以此类推可以使用其他路由断言工厂
网关简单的说就是提供一个对外统一的API入口和出口,统管企业对外的所有API出口。一般来说,网关对外暴露的URL或者接口信息, 我们统称之为路由信息。如果研发过网关中间件,或者使用或了解过ZUUL的,网关的核心肯定是Filter以及FilterChain(Filter责任链)。 Spring Cloud Gateway也具有路由信息和Filter。下面介绍一下Spring Cloud gateway中最重要的几个概念 ---引用自http://xujin.org/sc/gw/gw04/ 复制代码
路由(route):路由是网关最基础的部分,路由信息由一个ID、一个目的url、一组断言工厂和一组Filter组成。如果路由断言工厂为真,则说明请求的Url和配置的路由匹配。 复制代码
断言(Predicate): java 8中的断言函数。Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway中的断言函数允许开发者去定义匹配来自于http request中的任何信息,比如请求头和参数等。 复制代码
过滤器(filter):一个标准的Spring webFilter。Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter.网关 Filter实例是由Spring 框架中的网关Filter的特殊工厂构造。request在转发到目前服务之前,response在返回到调用端之前都可以被修改或者自定义。 复制代码
2、什么是After(Before)路由断言?
Before路由断言工厂带有一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之前会成功匹配,否则不能成功匹配。
After路由断言工厂带有一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之后会成功匹配,否则不能成功匹配。
3、案例
在 Spring Cloud Gateway 路由转发案例 基础上修改application.yml文件中 断言配置
server: port: 9001 spring: application: name: service-agateway cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #将此服务设置为网关 gateway: discovery: locator: enabled: true routes: #路由名称 - id: consumer_route #跳转路由 uri: http://www.scnunanshen.online/ #断言,设置拦截条件 predicates: - After=2018-03-18T17:32:58.129+08:00[Asia/Shanghai] #此处为After断言工厂,表示在该时间之后的请求都将跳转到uri 复制代码
示例:参数匹配方式
server: port: 9001 spring: application: name: service-agateway cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #将此服务设置为网关 gateway: discovery: locator: enabled: true routes: #路由名称 - id: consumer_route #跳转路由 uri: http://www.scnunanshen.online/ #断言,设置拦截条件 predicates: - Query=nan #此处表示设置当访问url中存在nan属性时,路由才会匹配 #http://localhost:9001/aa?nan=1访问 ,断言为真路由匹配。 #也可以同时设置属性跟值如:- Query=nan,2 #当路由匹配nan=2时,才会被拦截 复制代码