在shop-order-server模块中新建AnnoController:
@RestController
@Slf4j
public class AnnoController {
@RequestMapping("/anno1")
@SentinelResource(value = "anno1",
blockHandler="anno1BlockHandler",
fallback = "anno1Fallback"
)
public String anno1(String name){
if("wolfcode".equals(name)){
throw new RuntimeException();
}
return "anno1";
}
public String anno1BlockHandler(String name, BlockException ex){
log.error("{}", ex);
return "接⼝被限流或者降级了";
}
//Throwable时进⼊的⽅法
public String anno1Fallback(String name,Throwable throwable) {
log.error("{}", throwable);
return "接⼝发⽣异常了";
}
}
启动服务后,查看sentinel中的服务:
设置服务流控规则,并检验流控的响应方式,发现没有走全局的响应:
附加@SentinelResource的常用参数:
属性 | 作用 |
value | 资源名称,必需项(不能为空) |
entryType | entry 类型,可选项(默认为 EntryType.OUT ) |
blockHandler / blockHandlerClass | blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是public ,返回类型需要与原⽅法相匹配,参数类型需要和原⽅法相匹配并且最后加⼀个额外的参数,类型为BlockException 。blockHandler 函数默认需要和原⽅法在同⼀个类中。若希望使⽤其他类的函数,则可以指定blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则⽆法解析。 |
fallback / fallbackClass | fallback 函数名称,可选项,⽤于在抛出异常的时候提供fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore ⾥⾯排除掉的异常类型)进⾏处理。fallback 函数签名和位置要求: 1. 返回值类型必须与原函数返回值类型⼀致; 2.⽅法参数列表需要和原函数⼀致,或者可以额外多⼀个Throwable 类型的参数⽤于接收对应的异常。 3.fallback 函数默认需要和原⽅法在同⼀个类中。若希望使⽤其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则⽆法解析。 |
defaultFallback | 默认的 fallback 函数名称,可选项,通常⽤于通⽤的fallback 逻辑(即可以⽤于很多服务或⽅法)。默认fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore ⾥⾯排除掉的异常类型)进⾏处理。若同时配置了 fallback 和 defaultFallback,则只有fallback 会⽣效。defaultFallback 函数签名要求: 1. 返回值类型必须与原函数返回值类型⼀致; 2. ⽅法参数列表需要为空,或者可以额外多⼀个Throwable 类型的参数⽤于接收对应的异常。 3. defaultFallback 函数默认需要和原⽅法在同⼀个类中。若希望使⽤其他类的函数,则可以指定 fallbackClass为对应的类的 Class 对象,注意对应的函数必需为 static函数,否则⽆法解析。 |
exceptionsToIgnore | ⽤于指定哪些异常被排除掉,不会计⼊异常统计中,也不会进⼊ fallback 逻辑中,⽽是会原样抛出。 |