国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Spring-Cloud-Alibaba] Sentinel 整合RestTemplate &am

libin19890520 / 3061人閱讀

摘要:開發(fā)階段很有意義。源碼整合配置文件中添加來開啟編寫類,實現(xiàn)默認用戶遠程調(diào)用被限流降級,默認用戶應(yīng)用定義可以拿到異常信息無法拿到異常信息若初啟動應(yīng)用,設(shè)置流控規(guī)則,結(jié)果展示如下默認用戶源碼

Sentinel API

Github : WIKI

Sphu (指明要保護的資源名稱)

Tracer (指明調(diào)用來源,異常統(tǒng)計接口)

ContextUtil(標示進入調(diào)用鏈入口)

流控規(guī)則(針對來源屬性)

@GetMapping("/test-sentinel-api")
    public String testSentinelAPI(@RequestParam(required = false) String a) {
        String resourceName = "test-sentinel-api";
        
        ContextUtil.enter(resourceName, "user-center-service");
        // 定義一個sentinel 保護的資源,名稱是test-sentinel-api
        Entry entry = null;
        try {

            entry = SphU.entry(resourceName);
            // ...被保護的業(yè)務(wù)邏輯處理
            if (StringUtils.isEmpty(a)) {
                // Sentinel 默認只會統(tǒng)計BlockException & BlockException的子類,如果想統(tǒng)計其他異常信息,添加Tracer
                throw new IllegalArgumentException("A is not empty.");
            }
            return a;
            // block Exception: 如果被保護的資源被限流或者降級了,就會拋異常出去
        } catch (BlockException e) {
            log.error("我被限流啦?。}", e);
            return "我被限流啦!!";
        } catch (IllegalArgumentException argEx) {
            // 統(tǒng)計當前異常發(fā)生次數(shù) / 占比
            Tracer.trace(argEx);
            return "非法參數(shù)信息";
        } finally {
            if (entry != null) {
                entry.exit();
            }
            ContextUtil.exit();
        }
    }

降級規(guī)則

@GetMapping("/test-sentinel-api")
    public String testSentinelAPI(@RequestParam(required = false) String a) {

        // 定義一個sentinel 保護的資源,名稱是test-sentinel-api
        Entry entry = null;
        try {
            entry = SphU.entry("test-sentinel-api");
            // ...被保護的業(yè)務(wù)邏輯處理
            if (StringUtils.isEmpty(a)) {
                // Sentinel 默認只會統(tǒng)計BlockException & BlockException的子類,如果想統(tǒng)計其他異常信息,添加Tracer
                throw new IllegalArgumentException("A is not empty.");
            }
            return a;
            // block Exception: 如果被保護的資源被限流或者降級了,就會拋異常出去
        } catch (BlockException e) {
            log.error("我被限流啦??!{}", e);
            return "我被限流啦!!";
        } catch (IllegalArgumentException argEx) {
            // 統(tǒng)計當前異常發(fā)生次數(shù) / 占比
            Tracer.trace(argEx);
            return "非法參數(shù)信息";
        } finally {
            if (entry != null) {
                entry.exit();
            }
        }

    }

Sentinel Annotation

源碼:com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect & com.alibaba.csp.sentinel.annotation.aspectj.AbstractSentinelAspectSupport

SentinelResource 使用該注解重構(gòu)上述方法

      @GetMapping("/test-sentinel-resource")
      @SentinelResource(value = "test-sentinel-api", blockHandler = "blockException", fallback = "fallback")
      public String testSentinelResource(@RequestParam(required = false) String a) {
          // ...被保護的業(yè)務(wù)邏輯處理
          if (StringUtils.isEmpty(a)) {
              // Sentinel 默認只會統(tǒng)計BlockException & BlockException的子類,如果想統(tǒng)計其他異常信息,添加Tracer
              throw new IllegalArgumentException("A is not empty.");
          }
          return a;
      }
  
      /**
       * testSentinelResource BlockException method
       */
      public String blockException(String a, BlockException e) {
          log.error("限流了,{}", e);
          return "blockHandler 對應(yīng)《限流規(guī)則》";
      }
  
      /**
       * testSentinelResource fallback method
       * {@link SentinelResource} #fallback 在< 1.6的版本中,不能補貨BlockException
       */
      public String fallback(String a) {
          return "fallback 對應(yīng)《降級規(guī)則》";
      }
RestTemplate 整合Sentinel

使用 @SentinelRestTemplate.

resttemplate.sentinel.enabled可以開關(guān)是否啟用該注解。(開發(fā)階段很有意義。)

源碼:com.springframework.cloud.alibaba.sentinel.custom.SentinelBeanPostProcessor

@Bean
@LoadBalanced
@SentinelRestTemplate
public RestTemplate restTemplate() {
    return new RestTemplate();
}

@Autowired
private RestTemplate restTemplate;
...
Feign整合 Sentinel

配置文件中添加 feign.sentinel.enabled: true來開啟

編寫fallback 類,實現(xiàn)feign client

@Component
public class UserCenterFeignClientFallback implements IUserCenterFeignClient {
    @Override
    public UserDTO findById(Long userId) {
        UserDTO userDTO = new UserDTO();
        userDTO.setWxNickname("默認用戶");
        return userDTO;
    }
}

@Slf4j
@Component
public class UserCenterFeignClientFallbackFactory implements FallbackFactory {

    @Override
    public IUserCenterFeignClient create(Throwable cause) {
        return new IUserCenterFeignClient() {
            @Override
            public UserDTO findById(Long userId) {
                log.warn("遠程調(diào)用被限流/降級,{}", cause);
                UserDTO userDTO = new UserDTO();
                userDTO.setWxNickname("默認用戶");
                return userDTO;
            }
        };
    }
}

應(yīng)用fallback class

   /**
    * IUserCenterFeignClient for 定義 user-center feign client
    * fallbackFactory 可以拿到異常信息
    * fallback 無法拿到異常信息
    *
    * @author Isaac.Zhang | 若初
    * @since 2019/7/15
    */
   @FeignClient(name = "user-center",
           // fallback = UserCenterFeignClientFallback.class,
           fallbackFactory = UserCenterFeignClientFallbackFactory.class
   )
   public interface IUserCenterFeignClient {
       @GetMapping(path = "/users/{userId}")
       public UserDTO findById(@PathVariable Long userId);
   }
   
   

啟動應(yīng)用,設(shè)置流控規(guī)則,結(jié)果展示如下

   {
       id: 1,
       ...
       wxNickName: "默認用戶"
   }

源碼:org.springframework.cloud.alibaba.sentinel.feign.SentinelFeign

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/75492.html

相關(guān)文章

  • Spring Cloud Alibaba整合Sentinel流控

    摘要:前面我們都是直接通過集成的依賴,通過編碼的方式配置規(guī)則等。對于集成到中阿里已經(jīng)有了一套開源框架,就是用于將一系列的框架成功的整合到中。但這也是在學(xué)習(xí)過程中遇到的一個問題,還是得通過調(diào)試源碼的方式去發(fā)現(xiàn)問題的原因。 前面我們都是直接通過集成sentinel的依賴,通過編碼的方式配置規(guī)則等。對于集成到Spring Cloud中阿里已經(jīng)有了一套開源框架spring-cloud-alibaba...

    ytwman 評論0 收藏0
  • springcloud(二)——spring-cloud-alibaba集成sentinel入門

    摘要:介紹隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。以流量為切入點,從流量控制熔斷降級系統(tǒng)負載保護等多個維度保護服務(wù)的穩(wěn)定性。完備的實時監(jiān)控同時提供實時的監(jiān)控功能。您只需要引入相應(yīng)的依賴并進行簡單的配置即可快速地接入。 Sentinel 介紹 隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來越重要。 Sentinel 以流量為切入點,從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度...

    darkbug 評論0 收藏0
  • [Spring-Cloud-Alibaba] Sentinel 規(guī)則持久化

    摘要:在之前的練習(xí)中,只要應(yīng)用重啟,就需要重新配置,這樣在我們實際的項目是非常不實用的,那么有沒有辦法把我們配置的規(guī)則保存下來呢答案是,那么接下來,給大家來介紹如何將規(guī)則持久化。重新啟動測試效果添加流控規(guī)則查看同步的配置 在之前的練習(xí)中,只要應(yīng)用重啟,就需要重新配置,這樣在我們實際的項目是非常不實用的,那么有沒有辦法把我們配置的規(guī)則保存下來呢?答案是YES,那么接下來,給大家來介紹如何將Se...

    only_do 評論0 收藏0
  • Spring Cloud Alibaba 新版本發(fā)布:眾多期待內(nèi)容整合打包加入!

    摘要:在之后,也終于發(fā)布了最新的版本。該版本距離上一次發(fā)布,過去了整整個月下面就隨我一起看看,這個大家期待已久的版本都有哪些內(nèi)容值得我們關(guān)注。如果是用戶,同時也是阿里云這些產(chǎn)品的用戶,那么直接使用還是非常方便的。 在Nacos 1.0.0 Release之后,Spring Cloud Alibaba也終于發(fā)布了最新的版本。該版本距離上一次發(fā)布,過去了整整4個月!下面就隨我一起看看,這個大家期...

    不知名網(wǎng)友 評論0 收藏0
  • Spring Cloud Alibaba Sentinel對Feign的支持

    摘要:得到得到類得到類得到調(diào)用的服務(wù)名稱檢查和屬性省略部分代碼中的方法里面進行熔斷限流的處理。在的方法中進行的包裝。 Spring Cloud Alibaba Sentinel 除了對 RestTemplate 做了支持,同樣對于 Feign 也做了支持,如果我們要從 Hystrix 切換到 Sentinel 是非常方便的,下面來介紹下如何對 Feign 的支持以及實現(xiàn)原理。 集成 Feig...

    wthee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<