什么是熱點?我們看一下官網(wǎng)的解釋

我個人理解,之前的流控和降級是針對接口級別來進行限流的,而熱點可以做到更細粒度的限流,從參數(shù)的角度來進行限流。
回滾方法
之前的case,當觸發(fā)限流后,都是用sentinel系統(tǒng)默認的提示:Blocked by Sentinel(flow limiting)
我們能不能像使用hystrix那樣,某個方法出問題了,可以找到對應(yīng)的自定義的降級方法呢?
當然是可以以的,只不過在hystrix中我們使用的是@HystrixCommand而在Sentinel中,我們要使用@SentinelResource
新增controller測試方法
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false) String p2)
{
return "------testHotKey";
}
public String deal_testHotKey (String p1, String p2, BlockException exception)
{
return "------deal_testHotKey,o(╥﹏╥)o"; //sentinel系統(tǒng)默認的提示:Blocked by Sentinel (flow limiting)
}
需要注意的是testHotKey是我們的測試方法,方法里有兩個非必填的參數(shù),方法上面使用了@SentinelResource注解,意思是開啟了Sentinel資源配置的一些功能,value就是資源名,而blockHandler就相當于hystrix的回滾方法了。
接下來我們配置熱點規(guī)則

注意:資源名不是controller的方法名,而是配置的@SentinelResource的value名

參數(shù)索引表示的是第幾個參數(shù),比如我們要對p1進行限流就要填0,對p2限流就填1。
熱點限流都是根據(jù)QPS來判定的,因此我們設(shè)置的這條熱點規(guī)則的意思是:
當配置testHostKey這個資源的請求中含有第一個參數(shù)(也就是p1)的請求的QPS大于1時,觸發(fā)限流。
接下來我們進行測試
測試結(jié)果:
QPS大于1時(也就是一直發(fā)送請求)
當請求參數(shù)是p1時,會發(fā)生限流
當請求參數(shù)是p1和p2時,也會發(fā)生限流
當請求參數(shù)是p2時,不會發(fā)生限流
而且打印的是我們自定義的方法中的回滾信息。
