Rest实现熔断

Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护,在构造RestTemplate bean的时候需要加上 @SentinelRestTemplate 注解。
@Bean
@LoadBalanced
@SentinelRestTemplate(fallback = "handleFallback", fallbackClass =
ExceptionUtil.class,
blockHandler="handleBlock",blockHandlerClass=ExceptionUtil.class)
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@SentinelRestTemplate 注解的属性支持限流( blockHandler , blockHandlerClass )和降级( fallback , fallbackClass )的处理。
其中 blockHandler 或 fallback 属性对应的方法必须是对应 blockHandlerClass 或fallbackClass 属性中的静态方法。
该方法的参数跟返回值跟org.springframework.http.client.ClientHttpRequestInterceptor#interceptor 方法一致,其中参数多出了一个 BlockException 参数用于获取 Sentinel 捕获的异常。
 
比如上述 @SentinelRestTemplate 注解中 ExceptionUtil 的 handleException 属性对应的方法
声明如下:
复制代码
/**
* 熔断降级
*/
public class ExceptionUtil {
//限流熔断业务逻辑
public static SentinelClientHttpResponse handleBlock(HttpRequest request,
byte[] body,
ClientHttpRequestExecution
execution, BlockException ex) {
System.err.println("Oops: " + ex.getClass().getCanonicalName());
return new SentinelClientHttpResponse("限流熔断降级");
}
//异常熔断业务逻辑
public static SentinelClientHttpResponse handleFallback(HttpRequest
request, byte[] body,
ClientHttpRequestExecution
execution, BlockException ex) {
System.err.println("fallback: " + ex.getClass().getCanonicalName());
return new SentinelClientHttpResponse("异常熔断降级");
}
}
复制代码
Sentinel RestTemplate 限流的资源规则提供两种粒度:
  httpmethod:schema://host:port/path :协议、主机、端口和路径
  httpmethod:schema://host:port :协议、主机和端口
posted @   1640808365  阅读(128)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
主题色彩