前言
现在我们了解到通过Sentinel
控制对Spring mvc接口层级的控制,那么在我们实际项目开发时不仅仅限于接口,可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。
那么如何使用@SentinelResource
注解灵活的定义控制资源以及如何配置控制策略。
自定义资源点
下面的例子基于您已经引入了Spring Cloud Alibaba Sentinel为基础。
第一步:在应用主类中增加注解支持的配置:
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
// 注解支持的配置Bean
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
}
第二步:在需要通过Sentinel来控制流量的地方使用@SentinelResource
注解,比如下面以控制Service逻辑层的某个方法为例:
@Slf4j
@Service
public class TestService {
@SentinelResource(value = "doSomeThing")
public void doSomeThing(String str) {
log.info(str);
}
}
到这里一个需要被保护的方法就定义完成了。下面我们分别说说,定义了资源点之后,我们如何实现不同的保护策略,包括:限流、降级等。
如何实现限流与熔断降级
在定义了资源点之后,我们就可以通过Dashboard来设置限流和降级策略来对资源点进行保护了。同时,也可以通过@SentinelResource来指定出现限流和降级时候的异常处理策略。下面,就来一起分别看看限流和降级都是如何实现的。
实现限流控制
第一步:在Web层调用这个被保护的方法: