1. 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2. 添加配置信息
spring:
application:
name: order-sentinel
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8718
web-context-unify: false # 默认收敛调用链路
流控规则在服务提供方进行应用。
3. 配置流控规则
4. 配置自定义流控异常处理
@RequestMapping("/add")
@SentinelResource(value = "add", blockHandler="orderBlockHandler")
public String add()
{
System.out.println("下单成功");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello world!";
}
public String orderBlockHandler(BlockException ex)
{
return "订单接口被流控了";
}
这样当接口被流控的时候,就会调用自定义的流控处理方法。
5. 高级流控配置
可以根据QPS进行流控,也可以根据线程数流控。
6. 关联流控模式
当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。read_db
和 write_db
这两个资源分别代表数据库读写,我们可以给 read_db
设置限流规则来达到写优先的目的,这样当写库操作过于频繁时,读数据的请求会被限流。