## :-: 使用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分组管理
- 项目介绍
- 项目声明
- 项目简介
- 架构设计
- 项目亮点功能介绍
- 技术栈介绍
- 核心功能
- 运行环境
- 项目更新日志
- 文档更新日志
- F&Q
- 部署教程
- 环境准备
- JDK安装
- JDK1.8,17共存
- maven
- 分布式缓存Redis
- 单机版
- 集群
- 注册&配置中心alibaba/nacos
- 介绍
- Nacos安装
- Nacos配置中心
- Nacos注册发现
- Nacos生产部署方案
- 服务监控-BootAdmin
- 基本介绍
- 如何使用
- 整合Admin-Ui
- 客户端配置
- 链路追踪
- 基本介绍
- SkyWalking-1
- Skywalking-1
- 消息队列
- Kafka
- docker安装kafka
- Linux集群
- Maven私服
- nexus安装部署
- nexus使用介绍
- 全文搜索elasticsearch
- windows集群搭建
- docker安装es
- ElasticHD
- linux集群部署
- 统一日志解决方案
- 日志解决方案设计
- 介绍与相关资料
- ELK安装部署
- elasticsearch 7.5
- logstash-7.5
- kibana-7.5
- filebeat
- 服务监控-Prometheus
- Prometheus安装配置
- Prometheus介绍
- grafana
- 持续集成部署CICD
- 自动化部署Jenkins
- 安装部署win
- 打包发布远程执行
- 安装部署linux
- jenkins+gitlab+docker容器化工程自动化部署
- Git
- CICD说明
- 阿里云效
- CentOS_MYSQL安装
- docker
- 安装
- Docker安装Nginx
- Docker部署启动springboot
- dockerCompose
- harbor
- Docker私有镜像仓库
- Portainer
- Docker远程连接设置
- 打包工程
- 必要启动模块
- 核心模块
- 登录认证
- 缓存功能
- 日志模块
- 分布式锁
- 消息队列
- 异常处理
- 系统接口
- 参数验证
- es检索
- 数据导出
- 系统设计
- 系统总体架构
- 扩展模块(可选)
- 限流熔断alibaba/sentinel
- 使用Sentinel实现gateway网关及服务接口限流
- Sentinel使用Nacos存储规则及同步
- 服务调用Feign
- Feign基本介绍
- 如何使用
- 负载均衡
- 请求超时
- 请求拦截器
- 分布式任务调度
- XXL-JOB
- 分布式事务
- TX-LCN
- Seata
- Seata原理解析
- 数据库分库分表
- swagger文档
- 分布式ID生成器解决方案
- 服务网关CloudGateway
- 基本介绍
- 使用网关
- 路由配置
- 全局过滤器
- 服务认证授权架构设计
- 认证服务流程
- 授权服务流程
- 系统幂等性设计与实践
- 分布式日志链路跟踪
- 实时搜索系统设计
- 应用性能
- 压力测试工具
- Apache JMeter介绍和安装
- ApacheJMeter使用
- JVM
- JVM性能调优
- 常见JVM内存错误及解决方案
- JVM 分析工具详解
- Spring Cloud性能调优
- Linux运维
- Linux 常用命令
- Linux开启端口