• 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方法处理
  • 相关阅读:
    JavaScript中的原型和原型链
    蓝牙资讯|AirPods Pro 2推送新固件,苹果Find My功能受到好评
    lintcode 558 · 滑动窗口矩阵的最大值【二维数组前缀和 中等 vip】
    @Transactional失效场景/原因
    玩转AIGC:如何选择最佳的Prompt提示词?
    脑影像独立成分分析(ICA)的自动化流程
    乐优商城_第3章_-认识微服务(Feign+Zuul)
    leetCode 852. 山脉数组的峰顶索引
    kafka复习:(26)通过RecordHeaders和RecordHeader来实现TTL功能
    Oracle基础学习
  • 原文地址:https://blog.csdn.net/yichengjie_c/article/details/132922360