引入依赖sentinel:
html
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
在需要限流的实习类的方法上加入注解:
java
@SentinelResource(value = "doConfirm", blockHandler = "doConfirm")
public void doConfirm(ConfirmOrderMQDto dto)
要先初始化规则,由于我们设置了RocketMQ消息队列,所以要将限流规则放在确认订单前:
java
@SentinelResource(value = "confirmOrderDo", blockHandler = "doConfirmBlock")
@PostMapping("/do")
public Result<Object> doConfirm(@Valid @RequestBody ConfirmOrderDoReq req)
规定一个被限流后该走哪一步,否则会报错,参数和返回值要和规则的一致。
java
public Result<Object> doConfirmBlock(ConfirmOrderDoReq req, BlockException e) {
LOG.info("ConfirmOrderController购票请求被限流:{}", req);
// throw new BusinessException(BusinessExceptionEnum.CONFIRM_ORDER_FLOW_EXCEPTION);
Result<Object> commonResp = new Result<>();
commonResp.setSuccess(false);
commonResp.setMessage(BusinessExceptionEnum.CONFIRM_ORDER_FLOW_EXCEPTION.getDesc());
return commonResp;
}


控制台:
XML
#sentinel控制台
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=localhost:18719
laocalhost要跟控制台打开的端口保持一致
在idea中打开下载好的sentinel的jar包,点击运行启动类。

账户和密码都是sentinel。
打开实时监控并重新发送线程,可以看到响应时间:



将阈值修改后,每秒只能一个请求变为10个请求都通过。
通过控制台改变规则
可以在控制台或者IDE上配置流控规则,控制台不保存规则,重启就没有了。直接推送到客户端。
可以通过触点链路增加规则。
现在把doConfirm的value改成接口名,在控制台增加规则:
java
@SentinelResource(value = "/confirm-order/do", blockHandler = "doConfirmBlock")
@PostMapping("/do")
public Result<Object> doConfirm(@Valid @RequestBody ConfirmOrderDoReq req)


对接口有两种拦截,一种是进去了,一种是没进去。
接口的资源名称不要和接口路径一致,会导致限流后走不到降级方法中,不加资源返回的就是一堆字符串。



成功走到降价方法中。
限流规则的持久化:
html
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
在nacos控制台中点击train命名空间,增加一个配置:
选择json:
html
[
{
"resources":"doConfirm",
"limitApp":"default",
"grade":1,
"count":100, #阈值
"strategy":0, #流控模式
"controlBehavior":0, #流控效果
"clusterMode":false #是否集群
},{
"resources":"confirmOrderDo",
"limitApp":"default",
"grade":1,
"count":100,
"strategy":4,
"controlBehavior":0,
"clusterMode":false
}
]
降级方法:
流控模式:
warm up:适合有大量请求的情况。

排队等待:
对目标的限流是有条件的,需要关联的资源限流时,目标才会限流。
,且两个接口是实时的
关联&链路:
熔断策略:
慢调用比例,异常比例,异常数
比例阈值0.3,最大RT,熔断时长,在统计时长内,10个有超过三个的请求超过最大RT就会熔断。在超过熔断时长后就又会重新
最大RT
有降级在熔断后就可以继续往下处理,17章倒数第二个视频
