如何使用@SentinelResource注解灵活的定义控制资源以及如何配置控制策略,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
在实际应用过程中,我们可能需要限流的层面不仅限于接口。可能对于某个方法的调用限流,对于某个外部资源的调用限流等都希望做到控制。呢么,这个时候我们就不得不手工定义需要限流的资源点,并配置相关的限流策略等内容了。
自定义资源点
下面的例子基于您已经引入了春云阿里巴巴前哨为基础,如果您还不会这些,建议优先阅读《使用前哨实现接口限流》。
第一步:在应用主类中增加注解支持的配置:
@SpringBootApplication public class  TestApplication { ,,,public static void main (String [], args), { ,,,,,,,SpringApplication.run (TestApplication.class, args); ,,,} ,,,//,注解支持的配置Bean ,,@ bean ,,,public SentinelResourceAspect sentinelResourceAspect (), { ,,,,,,,return new SentinelResourceAspect (); ,,,} }
第二步:在需要通过哨兵来控制流量的地方使用<代码> @SentinelResource 代码>注解,比如下面以控制服务逻辑层的某个方法为例:
@Slf4j @ service public class  TestService { ,,,@SentinelResource (=value “doSomeThing") ,,,public void doSomeThing (String str), { ,,,,,,,log.info (str); ,,,} }
到这里一个需要被保护的方法就定义完成了。下面我们分别说说,定义了资源点之后,我们如何实现不同的保护策略,包括:限流,降级等。
如何实现限流与熔断降级
在定义了资源点之后,我们就可以通过仪表板来设置限流和降级策略来对资源点进行保护了。同时,也可以通过<代码> @SentinelResource> 代码来指定出现限流和降级时候的异常处理策略。下面,就来一起分别看看限流和降级都是如何实现的。
实现限流控制
第一步:在Web层调用这个被保护的方法:
@RestController public class  TestController { ,,@ autowired ,,,private TestService testService; ,,,@GetMapping (“/hello") ,,,public String hello (), { ,,,,,,,estService.doSomeThing (“hello “, +, new 日期()); ,,,,,,,return “didispace.com"; ,,,} }
第二步:启动测试应用,启动Sentinel-Dashboard。发一个请求到<代码>/代码>你好接口上,使得Sentinel-Dashboard上可以看到如下图所示的几个控制点:
可以看的到,除了如之前入门实例中那样有<代码>/你好> 代码资源点之外,多了一个<代码> doSomeThing 代码>资源点。可以通过界面为这个资源点设置限流规则,比如将其每秒设置为2。由于<代码>/你好> 代码资源不设置限流规则,所以只要请求<代码>/代码>你好接口,就可以直接模拟调用<代码> doSomeThing 代码>资源,来观察限流规则是否生效。
下面可以通过任何你喜欢的工具来调用<代码>/代码>你好接口,只要每秒超过2,那么就会出现如下的错误返回,代表限流策略生效了。