乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      基于hystrix的高并發(fā)&高可用服務(wù)架構(gòu)基礎(chǔ)實(shí)例(線程池隔離技術(shù))

       漢無為 2018-08-26

      基于hystrix的高并發(fā)&高可用服務(wù)架構(gòu)基礎(chǔ)實(shí)例(線程池隔離技術(shù))

      代碼倉庫https:///jikeh/JiKeHCN-RELEASE.git

      1、簡介

      1)wiki簡介

      https://github.com/Netflix/Hystrix/wiki

      簡而言之:

      在分布式系統(tǒng)中,存在很多依賴服務(wù),有的時候某些依賴服務(wù)出現(xiàn)故障也是很正常的,我們?nèi)绾伪WC在某個依賴服務(wù)故障的時候,來保證系統(tǒng)能夠整體正常運(yùn)行呢?

      使用hystrix,我們可以把其,當(dāng)作一種類似于springboot,dubbo,mybatis的框架,使用了該框架,可以保證我們的系統(tǒng)服務(wù)高可用

      Hystrix可以讓我們在分布式系統(tǒng)中對服務(wù)進(jìn)行一些控制:資源隔離、限流、熔斷、降級、運(yùn)維監(jiān)控,通過這些方法幫助我們提升分布式系統(tǒng)的可用性和穩(wěn)定性

      這節(jié),我們主要講一下使用hystrix的線程池隔離技術(shù)來實(shí)現(xiàn)資源隔離的基礎(chǔ)實(shí)例,下一節(jié)我們將抽取廣告系統(tǒng)的某個功能來應(yīng)用下該技術(shù)?。?!

      那什么是資源隔離?

      資源隔離:讓整個業(yè)務(wù)系統(tǒng)里,不會因某個依賴服務(wù)出現(xiàn)故障,而耗盡系統(tǒng)所有的資源,比如線程資源

      基于hystrix的高并發(fā)&高可用服務(wù)架構(gòu)基礎(chǔ)實(shí)例(線程池隔離技術(shù))

      2)官網(wǎng)介紹的簡單使用

      https://github.com/Netflix/Hystrix

      簡單看下,如果看不懂也沒事,繼續(xù)往下看,當(dāng)然也可以看我上傳的視頻

      2、基礎(chǔ)功能

      獲取廣告信息

      這里,我們就是獲取一個字符串來模擬獲取廣告信息:

      private String getStr(String name){

      return 'Hello ' + name + '!';

      }

      3、使用hystrix的線程池隔離技術(shù)改造上面的代碼

      1)處理單個請求

      public class CommandHelloWorld extends HystrixCommand {

      private final String name;

      public CommandHelloWorld(String name) {

      super(HystrixCommandGroupKey.Factory.asKey('GetAdsGroup'));

      this.name = name;

      }

      @Override

      protected String run() {

      return 'Hello ' + name + '!';

      }

      }

      2)處理批量請求

      public class ObservableCommandHelloWorld extends HystrixObservableCommand {

      private String[] adIds;

      public ObservableCommandHelloWorld(String[] adIds) {

      super(HystrixCommandGroupKey.Factory.asKey('GetAdsGroup'));

      this.adIds = adIds;

      }

      @Override

      protected Observable construct() {

      return Observable.create(new Observable.OnSubscribe() {

      public void call(Subscriber observer) {

      try {

      for(String adId : adIds) {

      observer.onNext('Hello ' + adId + '!');

      }

      observer.onCompleted();

      } catch (Exception e) {

      observer.onError(e);

      }

      }

      }).subscribeOn(Schedulers.io());

      }

      }

      4、單元測試

      1)測試單個請求

      /**

      * Hystrix基礎(chǔ)實(shí)例1:單個請求

      */

      public class UnitTestCommand {

      //同步:

      @Test

      public void testSynchronous() {

      String str = new CommandHelloWorld('World').execute();

      System.out.println(str);

      }

      //異步:

      @Test

      public void testAsynchronous() throws Exception {

      Future fWorld = new CommandHelloWorld('World').queue();

      String str = fWorld.get();

      System.out.println(str);

      }

      }

      2)測試批量請求

      /**

      * Hystrix基礎(chǔ)實(shí)例2:批量請求(基于觀察者)

      */

      public class UnitTestObservableCommand {

      //異步:

      @Test

      public void testAsynchronous() throws Exception {

      String adIds = '1,2,3';

      //異步獲取執(zhí)行:

      HystrixObservableCommand getAdInfosCommand = new ObservableCommandHelloWorld(adIds.split(','));

      Observable observable = getAdInfosCommand.observe();

      //訂閱一個觀察者來觀察執(zhí)行結(jié)果

      observable.subscribe(new Observer() {

      public void onCompleted() {

      System.out.println('獲取完了所有的廣告數(shù)據(jù)');

      }

      public void onError(Throwable e) {

      e.printStackTrace();

      }

      public void onNext(String adInfo) {

      System.out.println(JSONObject.toJSONString(adInfo));

      }

      });

      //同步獲取執(zhí)行結(jié)果:我們一次查詢,肯定是返回結(jié)果集的組合

      List ads = new ArrayList<>();

      Iterator iterator = observable.toBlocking().getIterator();

      while(iterator.hasNext()) {

      ads.add(iterator.next());

      }

      System.out.println('最終的結(jié)果集:'+ads);

      }

      }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多