亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Alibaba Sentinel(1):快速上手

hover_lew / 1399人閱讀

摘要:是一個(gè)靈活的系統(tǒng)負(fù)載控制框架,通過控制接口和方法的調(diào)用來保證系統(tǒng)負(fù)載不會(huì)過大,維持正常響應(yīng)速度。創(chuàng)建一個(gè)項(xiàng)目首先創(chuàng)建一個(gè)空的項(xiàng)目,加上的依賴。編寫控制規(guī)則將控制規(guī)則包裝為類。超過這個(gè)閾值則會(huì)拒絕調(diào)用該方法。

Alibaba Sentinel 是一個(gè)靈活的系統(tǒng)負(fù)載控制框架,通過控制接口和方法的調(diào)用來保證系統(tǒng)負(fù)載不會(huì)過大,維持正常響應(yīng)速度。

該項(xiàng)目的地址是 https://github.com/alibaba/Se... 。但是阿里的文檔一貫看起來一頭霧水,所以本文介紹如何用一個(gè)最簡(jiǎn)單的項(xiàng)目來上手。如果你熟悉 Spring Boot,那么幾分鐘就可以搞定。

1、創(chuàng)建一個(gè) Maven 項(xiàng)目

首先創(chuàng)建一個(gè)空的 Maven 項(xiàng)目,加上 Spring Boot 的依賴。pom.xml 看起來是下面的樣子,你可以直接拿來用:



  4.0.0

  com.demo
  sentinel-test
  1.0-SNAPSHOT

  
    1.8
    1.8
    UTF-8
  

  
    
      
        org.springframework.boot
        spring-boot-dependencies
        2.1.3.RELEASE
        pom
        import
      
    
  

這里沒有將 Spring Boot 作為 parent 項(xiàng)目,而是使用 ,但效果是一樣的。

2、添加依賴關(guān)系

pom.xml 中,首先添加 Spring Boot 依賴:


  org.springframework.boot
  spring-boot-starter

然后添加 Sentinel。在這個(gè)例子當(dāng)中,我們將用 注解 來實(shí)現(xiàn)負(fù)載控制,所以添加 sentinel-annotation-aspectj 依賴:


  com.alibaba.csp
  sentinel-annotation-aspectj
  1.5.1

添加了這兩個(gè)依賴就 OK 了。

3、啟動(dòng)類

Spring Boot 項(xiàng)目需要一個(gè) main() 方法來啟動(dòng),我們命名這個(gè)類為 com.demo.SentinelTestApplication,其內(nèi)容如下:

@SpringBootApplication
public class SentinelTestApplication {
  public static void main(String[] args) throws Exception {
    SpringApplication.run(SentinelTestApplication.class, args);
  }
}

目前這個(gè)類還沒有具體的內(nèi)容,但我們應(yīng)該先運(yùn)行一下,確保前面做的事情沒有出錯(cuò),然后再添加內(nèi)容。

4、需要進(jìn)行訪問控制的服務(wù) DemoService

我們?cè)?com.demo 包下創(chuàng)建一個(gè)名為 DemoService 的類,這個(gè)類包含一個(gè)需要做訪問控制的 call() 方法:

@Service
public class DemoService {

  private int counter;

  @SentinelResource(value = "DemoService.call", blockHandler = "callBlocked")
  public void call() {
    System.out.println("Hello (" + ++counter + ")");
  }

  public void callBlocked(BlockException ex) {
    System.err.println("Blocked (" + ++counter + ") : " + ex.toString());
  }
}

所謂訪問控制就是當(dāng)某個(gè)方法調(diào)用過于頻繁時(shí),拒絕掉一部分調(diào)用。什么才叫過于頻繁,我們可以通過自定義控制規(guī)則的方式來告訴 Sentinel。定義控制規(guī)則的部分放在后面介紹,我們現(xiàn)在先關(guān)注業(yè)務(wù)本身,也就是 DemoService 類。

這個(gè)類包含兩個(gè)方法,其中 call() 方法是主角,正常的業(yè)務(wù)會(huì)調(diào)用這個(gè)方法;而 callBlocked() 則會(huì)在 call() 方法被拒絕掉時(shí)調(diào)用。

call() 方法上面的 @SentinelResource 注解標(biāo)明了該方法是需要進(jìn)行訪問控制的。Sentinel 將需要進(jìn)行訪問控制的方法都稱作資源。這個(gè)注解有兩個(gè)屬性,value 屬性表示該資源的名稱,我們通過名稱為不同的資源制定不同的控制規(guī)則。blockHandler 屬性表示方法被拒絕時(shí)應(yīng)該調(diào)用哪個(gè)替代方法,這個(gè)替代方法必須在同一個(gè)類當(dāng)中,且參數(shù)列表要在原方法參數(shù)列表的基礎(chǔ)上再添加一個(gè) BlockException 類型的參數(shù)。

5、編寫控制規(guī)則

Sentinel 將控制規(guī)則包裝為 com.alibaba.csp.sentinel.slots.block.flow.FlowRule 類。它包含下面幾個(gè)屬性:

resource : 該規(guī)則針對(duì)哪個(gè)資源;

grade : 從哪個(gè)方面進(jìn)行度量,如該方法的每秒調(diào)用次數(shù),或同時(shí)調(diào)用該方法的線程數(shù)等等。

count : 度量閾值。超過這個(gè)閾值則會(huì)拒絕調(diào)用該方法。

strategy : 多個(gè)規(guī)則之間的搭配策略,具體參考這里。

下面我們?cè)?SentinelTestApplication 類里面添加一個(gè)創(chuàng)建規(guī)則的方法,同時(shí)在 main() 方法里面初始化它:

  private static void initRules() throws Exception {
    FlowRule rule1 = new FlowRule();
    rule1.setResource("DemoService.call");
    rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule1.setCount(5);   // 每秒調(diào)用最大次數(shù)為 5 次

    List rules = new ArrayList<>();
    rules.add(rule1);
    
    // 將控制規(guī)則載入到 Sentinel
    com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager.loadRules(rules);  
  }

  public static void main(String[] args) throws Exception {
    initRules();  // Sentinel 載入規(guī)則不一定非要在 Spring 初始化之前,在這之后也可以。
    SpringApplication.run(SentinelTestApplication.class, args);
  }

這樣 Sentinel 的規(guī)則就設(shè)置完畢。

6、啟用 Sentinel 注解的 AOP 攔截

Spring 提供 AOP 機(jī)制來實(shí)現(xiàn)方法調(diào)用的攔截,這是 Sentinel 實(shí)現(xiàn)控制規(guī)則的原理。Sentinel 提供 com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect 類,我們要在 Spring 容器中加入這個(gè) bean 才能讓 @SentinelResource 注解起作用。我們需要在 SentinelTestApplication 類里面添加下面的代碼:

  @Bean
  public SentinelResourceAspect sentinelResourceAspect() {
    return new SentinelResourceAspect();
  }

當(dāng)然,在實(shí)際項(xiàng)目里面這一步可以放到自動(dòng)配置當(dāng)中。

7、測(cè)試控制規(guī)則

最后我們寫一個(gè)方法來測(cè)試控制規(guī)則是否起作用,同樣是在 SentinelTestApplication 類里面:

  @Autowired
  private DemoService demoService;

  @PostConstruct
  public void run() {
    for (int i = 0; i < 10; i++) {
      demoService.call();
    }
  }

實(shí)際運(yùn)行 main() 方法時(shí),你將會(huì)看到這樣的輸出:

Hello (1)
Hello (2)
Hello (3)
Hello (4)
Hello (5)
Blocked (6) : com.alibaba.csp.sentinel.slots.block.flow.FlowException
Blocked (7) : com.alibaba.csp.sentinel.slots.block.flow.FlowException
Blocked (8) : com.alibaba.csp.sentinel.slots.block.flow.FlowException
Blocked (9) : com.alibaba.csp.sentinel.slots.block.flow.FlowException
Blocked (10) : com.alibaba.csp.sentinel.slots.block.flow.FlowException

通過這個(gè)例子,你應(yīng)該大概了解 Sentinel 運(yùn)作的機(jī)制了。在這個(gè)基礎(chǔ)上,Sentinel 還能實(shí)現(xiàn)控制規(guī)則的實(shí)時(shí)修改、遠(yuǎn)程配置、狀態(tài)監(jiān)控等等,它是個(gè)非常強(qiáng)大的框架。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77527.html

相關(guān)文章

  • springcloud(二)——spring-cloud-alibaba集成sentinel入門

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

    darkbug 評(píng)論0 收藏0
  • Spring Cloud Alibaba基礎(chǔ)教程:使用Sentinel實(shí)現(xiàn)接口限流

    摘要:但是比較可惜的是已經(jīng)宣布對(duì)停止更新。客戶端整合每個(gè)微服務(wù)客戶端都需要整合的客戶端封裝與配置,才能將監(jiān)控信息上報(bào)給展示以及實(shí)時(shí)的更改限流或熔斷規(guī)則等。下面我們就分兩部分來看看,如何使用來實(shí)現(xiàn)接口限流。 最近管點(diǎn)閑事浪費(fèi)了不少時(shí)間,感謝網(wǎng)友libinwalan的留言提醒。及時(shí)糾正路線,繼續(xù)跟大家一起學(xué)習(xí)Spring Cloud Alibaba。 Nacos作為注冊(cè)中心和配置中心的基礎(chǔ)教程,...

    stefanieliang 評(píng)論0 收藏0
  • Sentinel: 使用注解限流

    摘要:要使用注解來保護(hù)資源需要引入下面的依賴引入之后我們需要配置切面讓其生效,因?yàn)槭峭ㄟ^切面來實(shí)現(xiàn)的,我這邊以中使用進(jìn)行配置示列然后在需要限制的方法上加注解即可錯(cuò)誤發(fā)生在表示資源名,必填項(xiàng)處理的方法名,可選項(xiàng)。 在前面我們對(duì)Sentinel做了一個(gè)詳細(xì)的介紹,可以手動(dòng)的通過Sentinel提供的SphU類來保護(hù)資源。這種做法不好的地方在于每個(gè)需要限制的地方都得寫代碼,從 0.1.1 版本開始...

    Kross 評(píng)論0 收藏0
  • Spring Cloud Alibaba基礎(chǔ)教程:Sentinel使用Nacos存儲(chǔ)規(guī)則

    摘要:所以,在整合了做規(guī)則存儲(chǔ)之后,需要知道在下面兩個(gè)地方修改存在不同的效果控制臺(tái)中修改規(guī)則僅存在于服務(wù)的內(nèi)存中,不會(huì)修改中的配置值,重啟后恢復(fù)原來的值。控制臺(tái)中修改規(guī)則服務(wù)的內(nèi)存中規(guī)則會(huì)更新,中持久化規(guī)則也會(huì)更新,重啟后依然保持。 通過上一篇《使用Sentinel實(shí)現(xiàn)接口限流》的介紹,相信大家對(duì)Sentinel已經(jīng)有了初步的認(rèn)識(shí)。在Spring Cloud Alibaba的整合封裝之下,接...

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

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

    only_do 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<