@SentinelResource注解配合Sentinel控制台的基本使用

@SentinelResource

    • 第一种方式
    • 第二种方式
    • 第三种方式

第一种方式

1.首先需要一个controller,如下所示:

@RestController
public class RateLimitController {
    /**
     * 没有写兜底的方法
     * @return
     */
    @GetMapping("/rateLimit/byURL")
    @SentinelResource(value = "byURL")
    public ConResult byURL(){
        return new ConResult(200,"按url限流测试ok");
    }

这种方式直接是在@SentinelResource中配置value属性的属性值(即资源名称)。
2.在sentinel控制台中配置按url限流:
在这里插入图片描述
@SentinelResource注解配合Sentinel控制台的基本使用_第1张图片
3.在浏览器中快速点击http://localhost:8401/rateLimit/byURL,就会出现系统默认的提示:Blocked by Sentinel (flow limiting)

第二种方式

1.首先来一个controller,如下所示

@RestController
public class RateLimitController {

    @GetMapping("/byResource")
    @SentinelResource(value = "byResource",blockHandler = "handleException")
    public ConResult byResource(){
        return new ConResult(200,"按资源名称限流测试ok");
    }
    /**
     * 这是兜底的方法
     * @param e
     * @return
     */
    public ConResult handleException(BlockException e){
        return new ConResult(444,e.getClass().getCanonicalName()+"--服务不可用");
    }
}

2.通过配置@SentinelResource中的blockHandler的属性值来指定限流后的提示
3.在sentinel控制台的配置如下:
@SentinelResource注解配合Sentinel控制台的基本使用_第2张图片
4.在浏览器快速点击http://localhost:8401/byResource,会出现这样的结果:{“code”:444,“message”:“com.alibaba.csp.sentinel.slots.block.flow.FlowException–服务不可用”,“data”:null}

第三种方式

1.首先来一个controller,如下所示:

@RestController
public class RateLimitController {

    @GetMapping("/rateLimit/customerBlockHandle")
    @SentinelResource(value = "customerBlockHandle",blockHandlerClass = CustomerBlockHandle.class,
            blockHandler = "customerBlockHandle1")
    public ConResult customerBlockHandle(){
        return new ConResult(200,"自定义限流处理");
    }
}

其次再来一个CustomerBlockHandle类,如下所示:

public class CustomerBlockHandle {
/**
	
*/
    public static ConResult customerBlockHandle0(BlockException e){
        return new ConResult(444,"自定义--global handle BlockException--0");
    }

    public static ConResult customerBlockHandle1(BlockException e){
        return new ConResult(444,"自定义--global handle BlockException--1");
    }

}

2.通过配置@SentinelResource中的blockHandlerClass属性的属性值(这里是CustomerBlockHandle.class),和配置blockHandler属性的属性值,这里可以指定CustomerBlockHandle类中的方法,此处配置的是CustomerBlockHandle类中的customerBlockHandle1方法
3.sentinel控制台的配置如下:
@SentinelResource注解配合Sentinel控制台的基本使用_第3张图片
4.在浏览器快速点击:http://localhost:8401/rateLimit/customerBlockHandle,会出现这样的结果:{“code”:444,“message”:“自定义–global handle BlockException–1”,“data”:null}
5.这种方式是自定义全局流控处理,能够大大较低代码的耦合度!

你可能感兴趣的:(学习日志,java)