Spring Cloud Alibaba(五)简单接入Sentinel(blockHandler 用法)

在Spring Cloud Alibaba(四)简单接入Sentinel(fallback用法) 中,简单的尝试了一下fallback的用法,下面看一下blockHandler的用法,先看说明:

blockHandler : blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。

下面直接看代码,在SentinelController新增加一个方法

@GetMapping("/sentinel-test3/{id}")
	public String testBlockHandler (@PathVariable ("id") long id ) {
		return  sService.blockHandlerService (id);
	}

SentinelServiceImpl 实现类

	@Override
	@SentinelResource (value = "SentinelTest3",blockHandler = "testBlockHandler")
	public String blockHandlerService ( long id ) {
		
		return id+"okk!";
	}
	
	public String testBlockHandler (long id,BlockException b) {
		
		log.error ("error:",b);
		
		return id+":被限流降级";
	}

这里我们给@SentinelResource注解的value值是 SentinelTest3,按照规则我们定义一个testBlockHandler方法,用于处理限流降级。
启动Sentinel控制台,在浏览器中访问一下http://localhost:1889/sentinel-test3/11 确保 Sentinel控制台监听到请求。登陆Sentinel控制台,增加流控规则
Spring Cloud Alibaba(五)简单接入Sentinel(blockHandler 用法)_第1张图片
这里资源名就是 @SentinelResource注解的value值。为了测试,我们设置QPS = 1,新增后,我们通过浏览器多次访问 http://localhost:1889/sentinel-test3/11。正常情况的:
在这里插入图片描述
被限流的结果:
Spring Cloud Alibaba(五)简单接入Sentinel(blockHandler 用法)_第2张图片
说明流控规则已生效了。
我们结合blockHandlerClass 来使用
在FallBackService 类中增加一个静态方法:

public static String testBlockHandlerClass (long id,BlockException b) {
		
		log.error ("error:",b);
		
		return id+":被限流降级";
	}

修改一下 blockHandlerService 这个方法的注解如下:

@Override
	@SentinelResource (value = "SentinelTest3",
	blockHandler = "testBlockHandlerClass",
	blockHandlerClass = {FallBackService.class})
	public String blockHandlerService ( long id ) {
		
		return id+"okk!";
	}

重启应用,通过浏览器多次访问 http://localhost:1889/sentinel-test3/11 ,能同样得到上面的结果。

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

Spring Cloud Alibaba 系列学习笔记

Spring Cloud Alibaba(一) 简单实现服务注册与发现

Spring Cloud Alibaba(二) 简单使用nacos配置中心

Spring Cloud Alibaba(三)简单接入Sentinel(Sentinel 控制台)

Spring Cloud Alibaba(四)简单接入Sentinel(fallback用法)

Spring Cloud Alibaba(五)简单接入Sentinel(blockHandler 用法)

你可能感兴趣的:(Spring,Cloud,Alibaba)