【微服务】[限流Sentinel]【实战3】----实战Sentinel限制同一个手机号30秒只能发送一次验证码。
·
前言:
项目中经常用会有恶意刷接口的情况,例如频繁发送手机短信。针对这类问题,可以用sentinel作为限流。以下是实战过程。
注意:入参非对象,如果是对象不好处理。
入参的非对象的,可以通过参数(下标)作为限制参数,
例如:30秒内同一手机号只能发送一次,限流返回 “操作过于频繁,请稍后”
@SentinelResource(value = "sentinel_getCaptchaSms",blockHandler = "getCaptchaSmsHandler")
@PostMapping("/getCaptchaSms")
@Operation(summary = "【验证码】 - 获取验证码(手机短信) ")
public AppApiResponse<Object> getCaptchaSms(@RequestParam @Parameter(name = "手机号") String phoneNumber,
@RequestParam @Parameter(name = "手机区号ID") Long phoneAreaCodeId ){
return AppApiResponse.success(captchaService.getCaptchaSms(phoneNumber,phoneAreaCodeId));
}
/**
* 兜底方法
* @return 结果
*/
public AppApiResponse<Object> getCaptchaSmsHandler(String phoneNumber,Long phoneAreaCodeId, BlockException e ) {
System.out.println("[ ] ====>操作过于频繁,请稍后" );
return AppApiResponse.error(AppResponseCodeEnum.CODE_501_ERROR);//操作过于频繁,请稍后。
}
1、在Nacos配置中心添加Sentinel的热点参数限流规则:
nacos-----配置中心----新建配置----- app-sentinel-config.json

[
{
"resource": "sentinel_getCaptchaSms",
"limitApp": "default",
"grade": 1,
"paramIdx": 0,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"burstCount": 0,
"durationInSec": 30,
"paramFlowItemList": [],
"clusterMode": false
}
]
配置说明:
[
{
"resource": "sentinel_getCaptchaSms", // 限流资源名称,通常是接口或方法名(此处为获取验证码短信接口)
"limitApp": "default", // 限制的应用来源,default表示不区分来源
"grade": 1, // 限流阈值类型:0表示线程数,1表示QPS(此处为QPS限流)
"paramIdx": 0, // 热点参数索引,0表示第一个参数
"count": 1, // 限流阈值:此处QPS阈值为1
"strategy": 0, // 限流策略:0表示直接限流,1表示关联限流,2表示链路限流
"controlBehavior": 0, // 流量控制行为:0表示快速失败,1表示Warm Up,2表示排队等待
"burstCount": 0, // 突发流量阈值,允许的额外请求数
"durationInSec": 30, // 统计时间窗口,单位为秒(此处为30秒)
"paramFlowItemList": [], // 热点参数的特殊项配置,为空表示不区分参数值
"clusterMode": false // 是否集群限流模式:false表示单机限流
}
]
2、引入sentinel的数据依赖maven
<!-- Sentinel 集成 Nacos 数据源的关键依赖(必须添加) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!-- 1. Sentinel 核心依赖(必须:包含 ParamFlowArgumentParser 类) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
</dependency>
3、测试效果

更多推荐


所有评论(0)