• Sentinel整合RestTemplate


    1. resttemplate开启sentinel保护配置
      resttemplate.sentinel.enabled=true
      
      • 1
    2. 配置sentinel-dashboard地址
      spring.cloud.sentinel.transport.dashboard=localhost:8858\
      spring.cloud.sentinel.transport.dashboard.port=8739 
      
      • 1
      • 2
    3. 实例化RestTemplate并加入@SentinelRestTemplate注解
      @Configuration
      public class RestTemplateConfig {
          @Bean
          @LoadBalanced
          @SentinelRestTemplate(
                  fallbackClass = ExceptionUtil.class,fallback = "fallBack",
                  blockHandlerClass = ExceptionUtil.class, blockHandler = "handleBlock")
          public RestTemplate restTemplate() {
              return new RestTemplate();
          }
      
          public static class ExceptionUtil {
              public static ClientHttpResponse handleBlock(
                      HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException be){
                  RestResponse<Void> commonResult =  RestResponse.error("500","降级处理函数 block 。。。。。");
                  return new SentinelClientHttpResponse(JSON.toJSONString(commonResult));
              }
      
              public static ClientHttpResponse fallBack(
                      HttpRequest request, byte[] body, ClientHttpRequestExecution execution, BlockException be){
                  RestResponse<Void> commonResult = RestResponse.error("500","异常处理函数 fallback 。。。。。");
                  return new SentinelClientHttpResponse(JSON.toJSONString(commonResult));
              }
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
    4. 编写测试代码,并使用postman访问对应的url
      @Slf4j
      @RestController
      @RequestMapping("/test")
      public class TestController {
          @Autowired
          private RestTemplate restTemplate ;
      
          @GetMapping("/index")
          public RestResponse<String> index(){
              String url = "http://hello-nacos-client/hello/index" ;
              RestResponse<String> retValue = restTemplate.getForObject(url, RestResponse.class);
              log.info("ret value : {}", retValue);
              return retValue ;
          }
           
          @GetMapping("/exception")
          public Object exception(){
              String url = "http://hello-nacos-client/hello/exception" ;
              RestResponse<String> retValue = restTemplate.getForObject(url, RestResponse.class);
              log.info("ret value : {}", retValue);
              return retValue ;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
    5. 在dashboard上配置限流规则,再次通过postman调用url,能正常触发SentinelRestTemplate的blockHandler方法处理
    6. 在dashboard上配置熔断规则,再次通过postman调用url,能正常触发SentinelRestTemplate的fallBack方法处理
  • 相关阅读:
    Linux 文件系统:procfs, sysfs, debugfs 用法简介
    OpenCV入门9:图像增强和图像滤波
    Red Hat Enterprise Linux (RHEL) 9 更新了哪些新特性?
    出血性脑卒中临床智能诊疗建模
    英国物联网初创公司【FourJaw】完成180万英镑融资
    Git Bash/GUI Here “找不到应用程序问题
    深入源码剖析String类为什么不可变?(还不明白就来打我)
    抛砖系列之k8s HorizontalPodAutoscaler(HPA)
    分享一个你很可能不知道的Java异常实现的缺陷
    【Qt控件之QLabel】用法及技巧
  • 原文地址:https://blog.csdn.net/yichengjie_c/article/details/132922360