API网关:作用就是把各个服务对外提供的API汇集起来,让外界看起来是一个统一的接口。
网关 = 路由转发 + 过滤器(编写额外功能)
Spring Cloud Gateway是Spring Cloud的二级子项目,提供了微服务网关功能。
Spring Cloud Gateway主要包含:
Route:路由,一个路由包含ID、URI、Predicate(附加条件和内容,如当满足某种条件再进行路由转发)集合、Filter(在Gateway运行过程中Filter负责在代理服务『之前』或『之后』去做一些事情 )集合

网关客户端访问Gateway网关,Gateway中Handler Mapping对请求URL进行处理。处理完成后交换Web Handler,Web Handler会被Filter进行过滤。Filter中前半部分代码是处理请求的代码。处理完成后调用真实被代理的服务。被代理服务响应结果,结果会被Filter中后半部分代码进行操作,操作完成后把结果返回给Web Handler,再返回给Handler Mapping,最终响应给客户端。
spring:
application:
name: gateway-demo
cloud:
gateway:
discovery:
locator:
# 开启当前项目服务注册与发现功能
enabled: true
# 把服务名称转换为小写,Eureka中默认都是大写
lower-case-service-id: true
Route规则参考:org.springframework.cloud.gateway.route.RouteDefinition
谓词Predicate:在Spring Cloud Gateway中谓词实现org.springframework.cloud.gateway.handler.predicate.GatewayPredicate接口。其中类名符合XXXRoutePredicateFactory,其中XXX就是在配置文件中谓词名称。Path=/server/book/** 实际使用的就是PathRoutePredicateFactory
Query:设置必须包含的参数名。
Header:设置请求头中必须包含的内容(参数、参数值)。
Method:设置允许的请求方式。
RemoteAddr:设置允许访问的客户端地址。
Host:设置匹配请求参数中Host参数的值。(支持?匹配一个字符,*匹配0个或多个字符,**匹配0个或多个目录)。
Cookie:设置请求中包含指定Cookie名和满足特定正则要求的值(Cookie必须有两个值,第一个Cookie包含的参数名,第二个表示参数对应的值(可以正则表达式))。
Before:设置在指定时间点之前。
After:设置在指定时间点之后。
Between:请求时必须在设定的时间范围内容,才进行路由转发。
Weight:设置负载均衡中权重。同一组中URIne进行负载均衡。(语法:Weight=组名,负责均衡权重),默认条件是标准轮询。分组名称必须相同。
Filter
在路由转发到代理服务之前和代理服务返回结果之后额外做的事情。Filter执行了说明谓词条件通过了。
在Spring Cloud Gateway的路由中Filter分为:
内置Filter,都是org.springframework.cloud.gateway.filter.GatewayFilter实现类
自定义GlobalFilter,所有的路由都会运行
自定义GatewayFilter,在特定的路由上运行
内置Filter
AddRequestHeader:添加请求头参数,参数和值之间使用逗号分隔
Add