sentinel-自定义错误返回
自定义错误页
对所有接口的异常统一返回
-
编写错误返回
@RestController @RequestMapping("error") public class BlockController { @RequestMapping("block_handler") public Object globalBlockHandler(){ Map<String,Object> result = new HashMap<>(); result.put("status", HttpServletResponse.SC_BAD_REQUEST); result.put("message","错误"); return result; } }
-
修改配置文件
spring: cloud: sentinel: block-page: /error/block_handler #阻断页
fallback
这种方式可以为指定接口定制返回格式
-
编写配置类
@Configuration @EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass = true) //cglib代理 public class SentinelAOPConfig { /** * 所有的fallback的处理操作都是基于切面的形式完成的 * @return */ @Bean public SentinelResourceAspect getSentinelResourceAspect(){ return new SentinelResourceAspect(); } }
-
业务代码
@SentinelResource(value = "getTest",fallback = "testFallback")//兜底方法名 @GetMapping public String getTest(){ return "正常返回"; } public String testFallback(){ //方法参数和返回值和原方法一样 return "发生异常"; }
BlockHandler
将所有fallback处理方法定义再一个专属的类中
-
将错误处理方法提取出来
public class MyBlockHandler { /** * 兜底方法 * @param e 可能出现的限流异常的最大父类(其他参数要和原方法一样) * @return 返回值和原方法相同 */ public static String getBlockHandler(BlockException e){ //需要有static return "失败:"+e.getRule(); } }
-
原方法
@SentinelResource(value = "getTest",blockHandlerClass = MyBlockHandler.class, blockHandler = "getBlockHandler") @GetMapping public String getTest(){ return "正常返回"; }
优先级:BlockHandler>fallback>自定义错误页