SpringCloud Alibaba之Sentinel的API实战

前言

之前大家介绍了如何利用Sentinel控制台,设置流控,降级,授权等功能。今天老顾带着大家来了解Sentinel的API,看看如何利用编码方式,对业务进行流控、降级管理。

流量控制规则 (FlowRule)

流量规则的定义

重要属性:

同一个资源可以同时有多个限流规则,检查规则时会依次检查。

我们如何用代码进行流控规则的配置,其实也蛮简单;我们可以通过调用****FlowRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则,比如:

上面代码我们在应用启动的时候,初始化限流规则。启动后我们会发现控制台那边会有刚才代码定义的流控规则。

熔断降级规则 (DegradeRule)

熔断降级规则包含下面几个重要的属性:

可以通过**调用 **DegradeRuleManager.loadRules() 方法定义流量控制规则。

系统保护规则 (SystemRule)

规则包含下面几个重要的属性:

可以通过调用 SystemRuleManager.loadRules() 方法定义流量控制规则。

访问控制规则 (AuthorityRule)

授权规则,即**黑白名单规则(AuthorityRule)**非常简单,主要有以下配置项:

  • resource:资源名,即限流规则的作用对象
  • limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔如 appA,appB
  • strategy:限制模式,AUTHORITY_WHITE 为白名单模式AUTHORITY_BLACK 为黑名单模式,默认为白名单模式

可以通过调用 AuthorityRuleManager.loadRules() 方法定义流量控制规则。

热点参数规则(ParamFlowRule)

热点参数规则类似于流量控制规则(FlowRule):

可以通过 ParamFlowRuleManager 的 loadRules 方法更新热点参数规则

定义资源

Sentinel利用SphU进行资源的定义

注意:SphU.entry(xxx) 需要与 entry.exit() 方法成对出现,匹配调用,否则会导致调用链记录异常,抛出 ErrorEntryFreeException 异常。

定义了上面资源名后,配合之前的流控规则,现在就起到了流控保护了。一旦超出流量就提示限流了

SphU.entry定义资源,对资源进行保护;Sentinel就会对这个资源的访问频率,异常等进行统计,监控;如果达到一定的阀值后,就会限流或降级。

异常统计

有些时候我们的业务代码发生了异常,我们希望可以进入业务异常监控,达到一定的阀值,直接限流处理。我们先来看看下面的代码

上面代码表示如果参数a为空,就抛业务异常。我们再来设置一个降级规则

我们来运行访问一下 /test-api,故意不传参数a

我们发现,不管怎么快速刷新,一直报异常,没有进入降级捕获业务处理流程。这个是怎么回事呢?这个是因为Sentinel只会对BlockException以及他的子异常进行统计监控,不会对其他业务异常进行统计监控。那我们如果处理呢?这个时候就需要我们把业务异常也加入到Sentinel的统计监控里面,看如下代码

上面的代码我们捕获业务异常,并且到业务异常处理中,加入Tracer方法,把业务异常加入到统计中,这样业务异常就可以被降级了。

调用来源

大家是否记得在流控规则那里,有个针对来源

那如何代码设置调用来源,看一下

这样就是标记了调用来源。可以在流控规则那边设置针对来源的规则。

总结

Sentinel的核心的Api,SphU定义资源,Tracer定义统计,ContextUtil定义了上下文。小伙伴是不是也发现了,如果我们所有的代码都要用try-catch-finally方式进行处理,而且代码重复度很高,是不是很麻烦,也很恶心。下一篇老顾跟大家分享一下另一种实用的方式,谢谢!!!

如果喜欢本文,可以关注我们的官方账号,第一时间获取资讯。
你的关注是对我们更新最大的动力哦~

发布了137 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/EnjoyEDU/article/details/103902586