阿里限流神器Sentinel夺命连环 17 问? (8)

结论:若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出

将createOrder这个业务接口改造一下,同时指定blockHandler和fallback,代码如下:

阿里限流神器Sentinel夺命连环 17 问?

此时不配置任何规则,直接访问接口,可以看到这里直接进入了异常降级处理,如下图:

阿里限流神器Sentinel夺命连环 17 问?

我们对createOrder这个资源配置降级规则:60秒内如果出现2个以上的异常直接限流,如下图:

阿里限流神器Sentinel夺命连环 17 问?

此时我们再次访问这个接口,可以看到前两次直接进入了fallback指定的方法中(并未达到限流的异常数阈值),两次之后就被限流了,进入了blockHandler方法中,效果如下图:

阿里限流神器Sentinel夺命连环 17 问?

上述源码在sentinel-openfeign-provider9009这个模块中,源码获取方式见文末。

13、sentinel的黑白名单如何设置?

顾名思义,黑名单就是拉黑呗,拉黑就是不能访问了呗,sentinel能够针对请求来源进行是否放行,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

sentinel控制台对应得规则配置如下图:

阿里限流神器Sentinel夺命连环 17 问?

该规则对应得源码为com.alibaba.csp.sentinel.slots.block.authority.AuthorityRule,几个属性如下:

resource:资源名,即限流规则的作用对象。

limitApp:对应的黑名单/白名单,不同 origin 用 , 分隔,如 appA,appB。

strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式。

官方文档:https://github.com/alibaba/Sentinel/wiki/黑白名单控制

这里有个问题:请求来源是什么,怎么获取?

Sentinel提供了一个接口RequestOriginParser,我们可以实现这个接口根据自己业务的规则解析出请求来源名称。

下面我以IP作为区分请求来源,代码如下:

阿里限流神器Sentinel夺命连环 17 问?

然后将127.0.0.1设置为黑名单,如下图:

阿里限流神器Sentinel夺命连环 17 问?

直接访问::9009/sentinel/rate/order/query?id=1002,结果如下图:

阿里限流神器Sentinel夺命连环 17 问?

可以看到被限流了哦.................

好了,黑白名单就介绍到这里。

上述源码在sentinel-openfeign-provider9009这个模块中,源码获取方式见文末。

14、限流规则如何持久化?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzxyf.html