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回答
-
文档如下:
@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"); } }
对应的代码,其实在这里的示例项目里面也有:
可以将代码clone一下,测试一下。
-----
PS. 从您贴出的代码来看,是OK的,理论上可以正常工作。建议将日志级别设置成debug,调试一下。另外,可以先去掉fallback,先调试blockHandler,避免干扰。
祝您学习愉快!
012019-11-16
相似问题