Spring Cloud Gateway使用手册
Spring Cloud Gateway简介
网关的作用是为微服务架构提供一种简单有效的统一的API路由管理方式。Spring Cloud Gateway不仅提供统一的路由方式,并且基于filter调用链方式提供网关的基本功能,如安全、监控、限流。
基本概念
- 路由(routes):路由是网关中的基本组件之一,routes由以下属性组成:
- id:路由标识符,用于区别其他路由
- uri:指向目的地url,客户端请求最终被转发到的微服务
- order:多个路由时,路由的排序。数值越小,优先级越高
- predicates(exchange):断言,用于匹配路由规则。
- filters:过滤器,用于修改请求和响应的信息。
- 断言(predicate)断言用于路由规则判断
- 过滤器(filter):filter的作用是在请求的传递过程中,对请求和响应做一些处理。
路由
路由有两种配置方法,一是快捷方式配置,二是完全拓展参数配置。
快捷方式配置
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- Cookie=mycookie,mycookievalue- Cookie:表示断言工厂类型为Cookie
- mycookie:表示Cookie断言工厂的name属性
- mycookievalue:表示Cookie断言工厂的regexp属性
完全拓展参数配置
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- name: Cookie
args:
name: mycookie
regexp: mycookievalue完全拓展参数配置的方式就将所有参数按键值对形式配置
- predicates.name:表示断言工厂的类型
- predicates.args:表示断言工厂的属性
断言(predicates)
断言用于路由规则判断,当请求匹配到断言规则的时候,gateway才对请求进行转发处理。
断言工厂
Spring Cloud Gateway提供了大量的断言工厂类,这些断言工厂类可以匹配不同的HTTP请求属性。
以下是一些常用的断言器工厂类:
- After:这个断言器接收一个类型为
ZonedDateTime的时间,匹配发生在指定时间后的请求。 - Before:这个断言器接收一个类型为
ZonedDateTime的时间,匹配发生在指定时间前的请求。 - Between:这个断言器接收两个类型为
ZonedDateTime的时间,匹配发生在两个时间之间的请求。 - Cookie:这个断言器用于匹配请求中指定cookie的属性值,接收两个参数,一个是cookie的name,一个匹配cookie的value的正则表达式。
- Header:这个断言器用于匹配请求中指定headre的属性值,接收两个参数,一个是header的name,一个匹配header的value的正则表达式。
- Host:这个断言器用于匹配请求的Host属性值,接收一个uri列表参数,uri以逗号
,分隔host值,以星号*实现模糊匹配。 - Method:这个断言器用于匹配请求的方法,接收一个方法列表,请求方法匹配的请求才会被路由处理。
- Path:这个断言器用于匹配请求的路径,接收两个参数,一个是uri匹配模式,一个是
matchTrailingSlash(是否匹配尾部斜线,默认为true)。 - Query:这个断言器用于匹配请求的参数,接收两个参数,一个是请求参数的key(必填),一个是正则表达式用于匹配这个参数的value(可选)。如果请求的请求参数中包含指定参数且匹配正则表达式,则请求会被路由处理。
- RemoteAddr:这个断言器用于匹配请求的来源地址,接口一个ip地址列表。
需要注意的是,RemoteAddr Route predicate使用的是传入请求的远程地址,这意味着如果请求是通过一个代理层转发到gateway的话,gateway获取到的客户端ip可能不是真实的地址,我们可以自定义一个
RemoteAddressResolver解析类,解析我们需要的ip。 Weight:权重断言器用于对流量进行分流,接收两个参数,一个是权重的分组,一个分组的权重值。gateway将根据权重值调整流量流向两个路由。 XForwardedRemoteAddr:这个路由器匹配请求的X-Forwarded-For头,接收一个ip地址列表的参数,若请求X-Forwarded-For头包含指定的ip地址,则请求会被路由处理。
过滤器(filters)
路由过滤器允许以某种方式修改传入的http请求和传出的http响应。路由过滤器仅作用于特定的路由。spring cloud gateway包含大量内建的网关过滤器工厂。
过滤器生命周期
在gateway中,Filter从生命周期看被分为两种:pre和post
- pre:在请求处理前进行过滤,一般用于实现身份认证、鉴权、调用信息记录等。
- post:在请求被微服务执行过后进行处理,可用来对响应添加标准http header、收集统计信息和指标、将响应从微服务发送到客户端。
过滤器作用范围
在gateway中,Filter从作用范围看被分为两种:
- GatewayFilter:被应用到单个路由或一组路由上的过滤器
- GlobalFilter:被应用到所有路由器上
过滤器工厂
- AddRequestHeader:这个过滤器接收两个参数,一个是name,一个是value,用于给传入的请求头添加参数。
- AddRequestHeadersIfNotPresent:这个过滤器接收一个键值对集合,用于给传入的请求头添加参数。与AddRequestHeader不同的是,在请求头中不存在参数时,过滤器才会给请求头添加参数。若请求头中已存在参数,则使用来源的参数。
- AddRequestParameter:这个过滤器接收两个参数,一个是name,一个是value,用于给传入的请求添加请求参数。
- AddResponseHeader:这个过滤器接收两个参数,一个是name,一个是value,用于给传出的响应头添加参数。
- CircuitBreaker:断路器过滤器
- CacheRequestBody:可缓存请求body的过滤器
- DedupeResponseHeader:响应头参数去重过滤器,接收两个参数,一个是name列表,指定需要去重的响应头参数,一个是去重策略(可选)。
- FallbackHeaders:当请求被断路器拦截并且抛出执行异常时,会转到fallback的地址,此时FallbackHeaders filter可以将异常信息添加到fallback请求中。
- JsonToGrpc:过滤器可以将一个请求内容为json的请求,转换为一个gRpc请求并发起请求,之后将请求转换回json并响应。
- LocalResponseCache:本地响应缓存过滤器,可以将本地响应缓存,接收两个参数,一个缓存存活时间,一个是缓存总大小。
- MapRequestHeader:这个过滤器接收两个参数,一个是fromHeader,一个是toHeader。过滤器可以创建一个toHeader参数,参数值为fromHeader参数的值。如果源请求中,不存在fromHeader头参数,过滤器将不起作用。如果源请求存在映射后的toHeade头参数,则使用fromHeader头参数的值覆盖toHeade头参数的值。
- ModifyRequestBody:过滤器可以在gateway将请求发送到下游前修改请求的boby。这个过滤器只能通过java DSL配置。
- ModifyResponseBody:过滤器可以在gateway将响应发送到客户端前修改响应的boby。这个过滤器只能通过java DSL配置。
- PrefixPath:前缀地址过滤器接收一个前缀参数,过滤器在gateway转发请求时,在路径前加上请求前缀。
- PreserveHostHeader:这个过滤器告诉路由器,转发时是否应该带上请求来源的请求头信息。
- RedirectTo:这个过滤器接收两个参数,一个是http状态码,一个是url地址。状态码仅限300系列的重定向状态码。url地址会传入到Location header中。请求会被重定向到指定url地址。
- RemoveJsonAttributesResponseBody:过滤器允许删除响应body中的json属性。
- RemoveRequestHeader:过滤器允许删除请求指定的头属性。
- RemoveRequestParameter:过滤器允许删除请求指定的请求参数。
- RemoveResponseHeader:过滤器允许删除响应指定的响应头属性。
- RequestHeaderSize:过滤器传入两个参数,一个是maxSize请求头最大大小,一个是errorHeaderName错误头参数。当请求头的大小超过指定的maxSize时,将会响应错误信息。
- RequestRateLimiter:请求速率限制过滤器。这个过滤器指定了一个速率限制器,当请求速率超过限制时会进行限流并返回
HTTP 429 - Too Many Requests。
可以使用redis实现请求速率限流器
- RewriteLocationResponseHeader:允许重写响应的Locaition头属性。
在Spring Cloud Gateway中,"Location response"通常指HTTP响应头中的"Location"字段。这个字段指定了客户端应该访问的URL,通常是在发生重定向或者成功创建资源等操作时使用。
- RewritePath:传入两个参数,一个是匹配路径的正则表达式,一个是用于替换的目标值。过滤器可以根据正则表达式匹配请求路径,然后用目标值替换请求路径。
- RewriteResponseHeader:传入三个参数,一个是响应头属性,一个是匹配属性值的正则表达式,一个是替换的属性值。过滤器可以根据传入的参数,替换响应的头属性。
- SaveSession:这个过滤器会在请求转发到下游前强制执行
WebSession::save操作,保存会话到Spring Session中。 - SecureHeaders:这个过滤器会在响应传回客户端前给响应头添加一系列头属性。可以在配置文件中修改各个头属性的默认值,或者禁止添加指定的头属性。
- SetPath:SetPath过滤器接收一个路径模板参数,他提供一种简单的方法去使用模板参数来修改请求的地址。
- SetRequestHeader:过滤器接收一个键值对,将使用键值对去替换上游请求的头属性(而不是新增一个头属性),下游服务将接收到被替换的头属性及值。
- SetResponseHeader:过滤器接收一个键值对,将使用键值对去替换下游响应的头属性(而不是新增一个头属性),客户端将接收到被替换的头属性及值。
- SetStatus:过滤器接收一个http状态码作为参数,过滤器会使响应的状态码都设置为指定的状态码。
你可以设置参数
spring.cloud.gateway.set-status.original-status-header-name=original-http-status,使SetStatus过滤器在响应时将代理请求响应到网关的http状态码添加到网关响应到客户端的响应头中。
- StripPrefix:剥离前缀过滤器允许请求在发送到下游服务前,将请求路径部分剥离。过滤器接收一个参数,表示剥离几个部分。路由以
/符号分隔成几个部分。 - Retry:过滤器提供了一系列参数,根据参数的策略实现对失败请求进行重试。
- RequestSize:过滤器可以限制请求的大小。当请求大小超过指定值,则会返回413,并在响应的请求头中添加一个名为
errorMessage的头属性,并给出详细错误信息。 - SetRequestHostHeader:过滤器可以覆盖响应的host头属性的值。
- TokenRelay:过滤器允许请求传过来的身份认证令牌传递给下游服务。
- default-filters:默认路由器属性,可以给所有路由配置默认的过滤器。
全局过滤器(GlobalFilter)
GlobalFilter全局过滤器实现Ordered接口的getOrder()方法,可以定义过滤器的顺序。- 引入
spring-boot-starter-actuator并将配置spring.cloud.gateway.metrics.enabled=true可以开启过滤器指标采集功能。 - 配置属性
spring.cloud.gateway.global-filter.local-response-cache.enabled=true可以开启全局本地响应缓存功能。 - ForwardRoutingFilter:前向路由过滤器与属性
ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR有关。 - Netty routing filter
- NettyWriteResponseFilter
- ReactiveLoadBalancerClientFilter:这个过滤器判断uri属性是否使用了lb样式(如
lb://myservice),如果使用了,过滤器会通过负载均衡器使用真实的ip和端口替换uri中的服务名称myservice。通常用于服务发现。
默认情况下,如果一个服务找不到ip和port,则会返回503。你可以配置属性
spring.cloud.gateway.loadbalancer.use404=true来使其返回404。
- RouteToRequestUrlFilter
- WebSocketRoutingFilter
- 可以将一个转换器标记为过滤器以调过后面的过滤器
HttpHeadersFilters
- ForwardedHeadersFilter
- RemoveHopByHop Headers Filter
- XForwarded Headers Filter:在请求转发到下游服务前添加一些x-forwarded头属性
TLS和SSL支持
路由元数据配置
使用metadata属性配置路由交换器的属性,可以通过api获取属性。
Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR); // get all metadata properties
route.getMetadata(); // get a single metadata property
route.getMetadata(someKey);HTTP请求超时配置
可以为所有路由配置 Http 超时(响应和连接),也可以为每个特定路由设置超时时间。
全局超时
spring:
cloud:
gateway:
httpclient:
connect-timeout: 1000
response-timeout: 5s特定路由超时
- id: per_route_timeouts
uri: https://example.org
predicates:
- name: Path
args:
pattern: /delay/{timeout}
metadata:
response-timeout: 200
connect-timeout: 200流式java api配置路由
除了可以通过配置文件配置外,也可以使用java api配置路由
DiscoveryClient 路由定义定位器
配置spring.cloud.gateway.discovery.locator.enabled=true,使gateway使用服务发现组件,从注册中心中获取微服务的地址信息。
Reactor Netty日志访问
要启用 Reactor Netty 访问日志,请在设置java启动参数 -Dreactor.netty.http.server.accessLogEnabled=true
CORS跨域访问行为配置
你可以为gateway配置全局或每个路由的跨域访问行为
全局跨域访问配置
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "https://docs.spring.io"
allowedMethods:
- GET单路由跨域访问配置
spring:
cloud:
gateway:
routes:
- id: cors_route
uri: https://example.org
predicates:
- Path=/service/**
metadata:
cors
allowedOrigins: '*'
allowedMethods:
- GET
- POST
allowedHeaders: '*'
maxAge: 30gateway监视端口
/gateway actuator 端点允许您监视 Spring Cloud Gateway 应用程序并与之交互。配置以下属性启用监视端口。
management.endpoint.gateway.enabled=true # default value
management.endpoints.web.exposure.include=gateway组件开发指南
自定义断言器工厂
要自定义断言器工厂,可以实现RoutePredicateFactory接口并注册为bean,也可以拓展AbstractRoutePredicateFactory抽象类并注册为bean。
- 编写自定义的断言器类,并注入到Spring容器。
@Component
public class CustomRoutePredicateFactory extends AbstractRoutePredicateFactory<CustomRoutePredicateFactory.Config> {
public CustomRoutePredicateFactory() {
super(CustomRoutePredicateFactory.Config.class);
}
@Override
public List<String> shortcutFieldOrder() {
return Arrays.asList("minAge", "maxAge");
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return new Predicate<ServerWebExchange>() {
@Override
public boolean test(ServerWebExchange serverWebExchange) {
System.out.println("CustomRoutePredicateFactory Predicate test");
String ageStr = serverWebExchange.getRequest().getQueryParams().getFirst("age");
if (ageStr != null && !ageStr.isEmpty()) {
int age = Integer.parseInt(ageStr);
return age >= config.getMinAge() && age <= config.getMaxAge();
} else return false;
}
};
}
public static class Config {
int minAge;
int maxAge;
public int getMinAge() {
return minAge;
}
public void setMinAge(int minAge) {
this.minAge = minAge;
}
public int getMaxAge() {
return maxAge;
}
public void setMaxAge(int maxAge) {
this.maxAge = maxAge;
}
}
}- 在应用配置文件中添加自定义断言器配置
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
gateway:
routes:
- id: nacos-spring-cloud-study
##lb表示loadbalance,开启服务发现、负载均衡功能
uri: lb://nacos-spring-cloud-study
#断言,匹配请求路径
predicates:
- Path=/nacos-spring-cloud-study/**
- Custom=10,20
#过滤器,过滤掉请求路径的一层路径,相当于把/nacos-spring-cloud-study去掉,转发路径拼接为http://localhost:7101/**
filters:
- name: StripPrefix
args:
parts: 1
discovery:
locator:
enabled: false
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos自定义过滤器工厂
要自定义过滤器工厂,可以实现GatewayFilterFactory接口并注册为bean,也可以拓展AbstractGatewayFilterFactory抽象类并注册为bean。
- 编写自定义的过滤器工厂类,并注入到Spring容器中。
@Component
public class CustomGatewayFilterFactory extends AbstractGatewayFilterFactory<CustomGatewayFilterFactory.Config> {
public CustomGatewayFilterFactory() {
super(Config.class);
}
@Override
public List<String> shortcutFieldOrder() {
return List.of("name");
}
@Override
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("前置过滤器获得的config为:" + config.getName());
String name = "这是变量的name";
return chain.filter(exchange).then(Mono.fromRunnable(
() -> {
System.out.println("后置过滤器获得的config为:" + name);
}
));
}
};
}
public static class Config {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}- 在应用配置中配置自定义过滤器
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
gateway:
routes:
- id: nacos-spring-cloud-study
##lb表示loadbalance,开启服务发现、负载均衡功能
uri: lb://nacos-spring-cloud-study
#断言,匹配请求路径
predicates:
- Path=/nacos-spring-cloud-study/**
- Custom=10,20
#过滤器,过滤掉请求路径的一层路径,相当于把/nacos-spring-cloud-study去掉,转发路径拼接为http://localhost:7101/**
filters:
- name: StripPrefix
args:
parts: 1
- name: Custom
args:
name: myfilter
discovery:
locator:
enabled: false
nacos:
#server-addr: 127.0.0.1:8848
server-addr: 139.159.235.28:8848
username: nacos
password: nacos自定义全局过滤器
要自定义全局过滤器,可以实现GlobalFilter接口并注册为bean。
- 编写自定义的全局过滤器类,实现
GlobalFilter接口并注册为bean,实现Ordered接口可以设置全局过滤器顺序。
@Component
public class CustomGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
System.out.println("全局前置过滤器");
return chain.filter(exchange).then(Mono.fromRunnable(() -> System.out.println("全局后置过滤器")));
}
@Override
public int getOrder() {
return 0;
}
}- 全局过滤器的执行顺序在局部过滤器之后。
自定义过滤器顺序
自定义过滤器实现Order接口的getOrder()方法可以给过滤器设定执行顺序。
自定义组件的命名
- 自定义过滤器类名称应以
GatewayFilterFactory结尾 - 自定义断言器类名称应以
RoutePredicateFactory结尾 - 自定义全局过滤器类名称应以
GlobalFilter结尾。
使用Spring Cloud Gateway实现请求转发
- 引入Spring Cloud Gateway依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>- 在项目配置文件applicaiton.yml中配置网关转发配置
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
gateway:
routes:
- id: nacos-spring-cloud-study
uri: http://localhost:7101
#断言,匹配请求路径
predicates:
- Path=/nacos-spring-cloud-study/**
#过滤器,过滤掉请求路径的一层路径,相当于把/nacos-spring-cloud-study去掉,转发路径拼接为http://localhost:7101/**
filters:
- name: StripPrefix
args:
parts: 1- 启动服务,调用http://127.0.0.1:7000/nacos-spring-cloud-study/getConfig,gateway会将请求转发到http://localhost:7101/getConfig。
Spring Cloud Gateway适配Nacos实现服务发现
- 引入Nacos相关依赖
<dependencies>
<!--spring cloud gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--服务均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>- 在应用配置文件applicaiton.yaml中uri添加
lb开启gateway的服务发现功能。配置nacos服务地址。
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
gateway:
routes:
- id: nacos-spring-cloud-study
##lb表示loadbalance,开启服务发现、负载均衡功能
uri: lb://nacos-spring-cloud-study
#断言,匹配请求路径
predicates:
- Path=/nacos-spring-cloud-study/**
#过滤器,过滤掉请求路径的一层路径,相当于把/nacos-spring-cloud-study去掉,转发路径拼接为http://localhost:7101/**
filters:
- name: StripPrefix
args:
parts: 1
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos- springboot启动类添加
@EnableDiscoveryClient注解,启用nacos服务发现服务注册功能。
@SpringBootApplication
@EnableDiscoveryClient
public class GatewaySpringCloudStudyMain {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(GatewaySpringCloudStudyMain.class, args);
}
}- 启动应用,浏览器访问网关地址/微服务/接口地址时,请求会转发到微服务/接口地址。
- 简写版,去掉所有的路由配置,只保留gateway的服务发现配置
spring.cloud.gateway.discovery.locator.enabled=true,此时也支持服务发现功能。
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
gateway:
discovery:
locator:
enabled: true
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos此时,只要按照网关地址/微服务/接口地址的格式去访问,就可以转发请求到对应微服务并回到响应。
Spring Cloud Gateway适配Nacos实现动态配置管理
- 引入相关依赖
<dependencies>
<!--spring cloud gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--服务均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>- 在应用配置文件中添加相关配置
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
nacos:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config:
file-extension: yml
namespace: dev
discovery:
namespace: dev
profiles:
active: dev
config:
import: nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}- 在nacos控制台中的配置文件gateway-spring-cloud-study-dev.yml中配置gateway路由配置
spring:
cloud:
gateway:
routes:
- id: nacos-spring-cloud-study
##lb表示loadbalance,开启服务发现、负载均衡功能
uri: lb://nacos-spring-cloud-study
#断言,匹配请求路径
predicates:
- Path=/nacos-spring-cloud-study/**
- Custom=15,20
#过滤器,过滤掉请求路径的一层路径,相当于把/nacos-spring-cloud-study去掉,转发路径拼接为http://localhost:7101/**
filters:
- name: StripPrefix
args:
parts: 1
- name: Custom
args:
name: myfilter
discovery:
locator:
enabled: false- 此时即实现了Spring Cloud Gateway整合Nacos实现动态路由配置,在nacos中修改路由配置,gateway会自动刷新本地路由配置。
Spring Cloud Gateway适配Sentinel实现限流
Sentinel从1.6.0版本开始提供了Spring Cloud Gateway的适配模块,提供了两周资源维度的限流:一是route维度、二是自定义API分组维度。默认不支持URL粒度。
通过Spring Cloud Alibaba接入sentinel,当spring.cloud.sentinel.filter.enabled配置项为true时,所有访问gateway的路径都会被定义为sentinel资源,类型为Router ID。如果在控制台看到有url信息,则需要将此属性配置为false。
- 应用相关依赖。
<dependencies>
<!--spring cloud gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--sentinel限流-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--sentinel适配Spring Cloud Gateway-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
</dependencies>- 在应用配置文件中配置gateway路由和sentinel配置。
server:
port: 7000
spring:
application:
name: gateway-spring-cloud-study
cloud:
gateway:
routes:
- id: nacos-spring-cloud-study
uri: http://localhost:7101
#断言,匹配请求路径
predicates:
- Path=/nacos-spring-cloud-study/**
#过滤器,过滤掉请求路径的一层路径,相当于把/nacos-spring-cloud-study去掉,转发路径拼接为http://localhost:7101/**
filters:
- name: StripPrefix
args:
parts: 1
sentinel:
transport:
dashboard: 127.0.0.1:8858
port: 8719- 启动应用,调用接口http://127.0.0.1:7000/nacos-spring-cloud-study/getConfig,在sentinel控制台将会看到路由被定义为sentinle资源。

- 配置资源的限流规则,即可实现限流。