🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## :-: 使用Sentinel实现gateway网关及服务接口限流 # ## **1、SpringCloud应用整合Sentinel 【hmall-service-market】** 版本号我使用的是 2.2.0.RELEASE,应保持和你的 Spring Cloud Alibaba 应用一致。 ### 添加Sentinel依赖 ``` <!--alibaba:sentinel:限流 熔断 couldAlibaba 版本升级2.2需要改成如下--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> ``` ## \*\*\*\* ## **2、 增加配置** ![](https://img.kancloud.cn/85/ba/85ba401f513b69121a3a8aab1967491d_598x189.png) 其中,spring.cloud.sentinel.eager=true 可使 你的SpringCloud应用启动时,直接与Sentinel建立心跳连接,访问sentinel 控制台就可以看到服务连接情况,不需要第一次访问应用的某个接口,才连接sentinel。 这里的 `spring.cloud.sentinel.transport.port` 端口配置会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。 ## **3、Feign 的支持** Sentinel 适配了 [Feign](https://github.com/OpenFeign/feign) 组件。如果想使用,除了引入 `spring-cloud-starter-alibaba-sentinel` 的依赖外还需要 2 个步骤: * 配置文件打开 Sentinel 对 Feign 的支持,增加如下配置: ~~~ feign.sentinel.enabled=true ~~~ 加入 `spring-cloud-starter-openfeign` 依赖使 Sentinel starter 中的自动化配置类生效: ~~~ <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${spring-cloud-openfeign.version}</version> </dependency> ~~~ ``` 测试接口访问 http://127.0.0.1:7003/carouselList ``` ## ## **4 、配置限流规则** 在完成了上面后,我们在 hmall-market 服务下,点击\*\*`簇点链路`\*\*菜单,可以看到如下界面: ![](https://img.kancloud.cn/f0/e3/f0e3f208f3ffed70dbabc9059a348725_1340x523.png) 其中/carouselList接口,就是我们上一节中实现并调用过的接口。通过点击\*\*`流控`\*\*按钮,来为该接口设置限流规则,比如: ![](https://img.kancloud.cn/fd/28/fd28d270c023abc68c5a196df1d4d2ad_678x398.png) 这里做一个最简单的配置: * 阈值类型选择:QPS * 单机阈值:1 综合起来的配置效果就是,该接口的限流策略是每秒最多允许1个请求进入。 点击\*\*`新增`\*\*按钮之后,可以看到如下界面: ![](https://img.kancloud.cn/4e/e7/4ee71ae32439ea22551a532ecda7f1bf_1097x313.png) 其实就是左侧菜单中`流控规则`的界面,这里可以看到当前设置的所有限流策略。 我这里使用postman快速点击,访问多次,就会出现被限流情况(1秒钟内访问超过1次)。 ## 5、网关流控 Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流。 ![](https://img.kancloud.cn/69/4a/694a1ae2f1d337d21173e3586b27d5fe_1132x706.png) ### 5.1 Spring Cloud Gateway网关整合Sentinel 从 1.6.0 版本开始,Sentinel 提供了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流: * route 维度:即在 Spring 配置文件中配置的路由条目,资源名为对应的 routeId * 自定义 API 维度:用户可以利用 Sentinel 提供的 API 来自定义一些 API 分组 基于SpringBoot再构建一个**hmall-service-gateway-jwt**网关模块,使用时需引入以下模块(以 Maven 为例): ~~~ <!--alibaba:sentinel:限流 熔断 couldAlibaba 版本升级2.2需要改成如下--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>${spring-cloud-alibaba.version}</version> </dependency> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>${alibaba-sentinel}</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency> <!--alibaba:nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ~~~ 启动网关应用,通过网关访问刚才那个测试接口:[http://127.0.0.1:9000/api/market/carouselList](http://127.0.0.1:9000/api/market/carouselList) ![](https://img.kancloud.cn/48/c7/48c73da6d81279d429075fbd3db8bec8_1110x336.png) gateway应用还可以自定义API分组管理