Spring Cloud Alibaba Sentinel 支持对 RestTemplate 的服务调用使用 Sentinel 进行保护,在构造RestTemplate bean的时候需要加上 @SentinelRestTemplate 注解。这样的话,所有的调用相当于都给加上了熔断降级的方法。
/

  1. @SpringBootApplication
  2. @EntityScan("cn.itcast.order.entity")
  3. public class RestOrderApplication {
  4. /**
  5. * sentinel支持对restTemplate的服务调用使用sentinel方法.在构造
  6. * RestTemplate对象的时候,只需要加载@SentinelRestTemplate即可
  7. *
  8. * 资源名:
  9. * httpmethod:schema://host:port/path :协议、主机、端口和路径
  10. * httpmethod:schema://host:port :协议、主机和端口
  11. *
  12. * @SentinelRestTemplate:
  13. * 异常降级
  14. * fallback : 降级方法
  15. * fallbackClass : 降级配置类
  16. * 限流熔断
  17. * blockHandler
  18. * blockHandlerClass
  19. */
  20. @LoadBalanced
  21. @Bean
  22. @SentinelRestTemplate(fallbackClass = ExceptionUtils.class,fallback = "handleFallback",
  23. blockHandler = "handleBlock" ,blockHandlerClass = ExceptionUtils.class
  24. )
  25. public RestTemplate restTemplate() {
  26. return new RestTemplate();
  27. }
  28. public static void main(String[] args) {
  29. SpringApplication.run(RestOrderApplication.class,args);
  30. }
  31. }

2、自定义异常工具类:ExceptionUils

return的对象一定是前端需要的类型,以免报错。

  1. public class ExceptionUtils {
  2. /**
  3. * 静态方法
  4. * 返回值: SentinelClientHttpResponse
  5. * 参数 : request , byte[] , clientRquestExcetion , blockException
  6. */
  7. //限流熔断业务逻辑
  8. public static SentinelClientHttpResponse handleBlock(HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException ex) {
  9. return new SentinelClientHttpResponse("abc");
  10. }
  11. //异常降级业务逻辑
  12. public static SentinelClientHttpResponse handleFallback(HttpRequest request, byte[] body,
  13. ClientHttpRequestExecution execution, BlockException ex) {
  14. return new SentinelClientHttpResponse("def");
  15. }
  16. }