193 Sentinel与Spring Cloud GateWay网关限流
在Spring Cloud项目中,我们可以使用Sentinel来对Spring Cloud Gateway的路由进行限流。以下是一个简单的例子,展示如何为Spring Cloud Gateway中的路由配置限流规则。
首先,确保你的项目中已经加入了Sentinel依赖和Spring Cloud Alibaba的依赖。
<!-- Sentinel 依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.0</version>
</dependency>
<!-- Spring Cloud Alibaba Sentinel 依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
然后,在你的配置文件中配置Sentinel的相关属性,例如Sentinel 控制台地址和应用名。
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080 # Sentinel 控制台地址
# 默认8719端口,如果和其它服务端口冲突可以更改
port: 8719
# 应用名,会在Sentinel控制台显示
app-name: my-spring-cloud-gateway
接下来,在Spring Cloud Gateway的路由配置中,为特定的路由配置Sentinel的限流规则。
@Configuration
public class GatewayConfiguration {
@Bean
public RouteLocator customRouteLocator(RouteLocator routeLocator, GatewayProperties properties) {
// 为/api路由配置限流规则,QPS为1
properties.getRoutes().get("api-route").setPredicates(s -> s.path("/api")
.and()
.header("X-Sentinel-Resource", "api-route")
.and()
.header("X-Sentinel-Strategy", "flow")
.and()
.header("X-Sentinel-Threshold", "1"));
return routeLocator;
}
}
在上述代码中,我们通过为路由配置额外的头信息来指定Sentinel的限流规则。这些头信息会被Sentinel的过滤器读取,并应用为限流规则。
最后,确保你的Spring Cloud Gateway应用中包含了Sentinel的过滤器,以便Sentinel可以根据配置的规则来限制请求的通过。
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
public SentinelGatewayFilter sentinelGatewayFilter() {
return new SentinelGatewayFilter();
}
}
以上代码展示了如何为Spring Cloud Gateway中的路由配置Sentinel限流规则。当请求到达配置了Sentinel限流规则的路由时,Sentinel会根据规则限制请求的通过,以此实现限流保护。
评论已关闭