RestTemplate 返回友好的提示

来源:8-15 RestTemplate整合Sentinel

风舞炫动

2019-11-16

目哥,我这样定义了blockHandler和fallback

import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;

@Slf4j
public class RestTemplateException {
    public static SentinelClientHttpResponse block(HttpRequest request, byte[] body,
                                                   ClientHttpRequestExecution execution, BlockException e) {
        log.warn("限流或者降级了", e);
        return new SentinelClientHttpResponse("限流或者降级了");
    }

    public static SentinelClientHttpResponse fallback(HttpRequest request, byte[] body,
                                                      ClientHttpRequestExecution execution, BlockException e) {
        log.warn("降级了", e);
        return new SentinelClientHttpResponse("降级了");
    }
}

然后在定义RestTemplate的时候进行指定
图片描述
但最后返回的提示依旧是这样的
图片描述
这里我需要如何做呢?统一异常处理吗?还是要我自己来实现一个ClientHttpResponse呢?

写回答

1回答

大目

2019-11-16

您好,可以参考这里的写法哦:https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc#resttemplate-support

文档如下:

@Bean    
@SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class)    
public RestTemplate restTemplate() {    
  return new RestTemplate();    
}


public class ExceptionUtil {    
  public static SentinelClientHttpResponse handleException(HttpRequest request,    
    byte[] body, ClientHttpRequestExecution execution, BlockException ex) {    
    System.out.println("Oops: " + ex.getClass().getCanonicalName());    
    return new SentinelClientHttpResponse("custom block info");    
  }    
}

对应的代码,其实在这里的示例项目里面也有:

https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/ServiceApplication.java

可以将代码clone一下,测试一下。

-----

PS. 从您贴出的代码来看,是OK的,理论上可以正常工作。建议将日志级别设置成debug,调试一下。另外,可以先去掉fallback,先调试blockHandler,避免干扰。

祝您学习愉快!

0
1
风舞炫动
我去试试,感谢目哥
2019-11-16
共1条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3085 学习 · 1324 问题

查看课程