成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Spring Cloud實(shí)戰(zhàn)(五)-Spring Cloud Netflix Hystrix

CrazyCodes / 1887人閱讀

摘要:實(shí)戰(zhàn)五概要什么是怎么用常見(jiàn)配置介紹什么是是分布式系統(tǒng)處理超時(shí)和錯(cuò)誤的機(jī)制如下圖所示分布式系統(tǒng)中某個(gè)用戶請(qǐng)求依賴(lài)服務(wù)當(dāng)此請(qǐng)求并發(fā)超過(guò)的時(shí)候服務(wù)處理速度變慢但是服務(wù)還是被調(diào)用大量請(qǐng)求會(huì)阻塞在服務(wù)器上影響其它整個(gè)服務(wù)在復(fù)雜的分布式架構(gòu)的應(yīng)用程序

Spring Cloud實(shí)戰(zhàn)(五)-Spring Cloud Netflix Hystrix 概要

什么是Spring Cloud Netflix Hystrix?

怎么用 Spring Cloud Netflix Hystrix?

Hystrix常見(jiàn)配置介紹

什么是Spring Cloud Netflix Hystrix?

Spring Cloud Netflix Hystrix是分布式系統(tǒng)處理超時(shí)和錯(cuò)誤的機(jī)制,如下圖所示,分布式系統(tǒng)中某個(gè)用戶請(qǐng)求依賴(lài)A,H,I,P服務(wù).

當(dāng)此請(qǐng)求并發(fā)超過(guò)50的時(shí)候,服務(wù)I處理速度變慢,但是服務(wù)I還是被調(diào)用.


大量請(qǐng)求會(huì)阻塞在Tomcat服務(wù)器上,影響其它整個(gè)服務(wù).在復(fù)雜的分布式架構(gòu)的應(yīng)用程序有很多的依賴(lài),都會(huì)不可避免地在某些時(shí)候失敗.高并發(fā)的依賴(lài)失敗時(shí)如果沒(méi)有隔離措施,當(dāng)前應(yīng)用服務(wù)就有被拖垮的風(fēng)險(xiǎn).
Spring Cloud Netflix Hystrix就是隔離措施的一種實(shí)現(xiàn),可以設(shè)置在某種超時(shí)或者失敗情形下斷開(kāi)依賴(lài)調(diào)用或者返回指定邏輯,從而提高分布式系統(tǒng)的穩(wěn)定性.

怎么用Spring Cloud Netflix Hystrix?

百說(shuō)不如一run,構(gòu)造一個(gè)例子來(lái)實(shí)現(xiàn),例子要實(shí)現(xiàn)使用Hystrix的Fallback(失敗后)邏輯來(lái)處理錯(cuò)誤情景
1.Eureka Server,和Eureka Client跟之前一樣,只需改造Eureka Sentence
2.Eureka Sentence 添加pom依賴(lài)

        
            org.springframework.cloud
            spring-cloud-starter-hystrix
        
        
            org.springframework.cloud
            spring-cloud-starter-hystrix-dashboard
        

3.Eureka Sentence的Application添加hystrix注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
@EnableHystrixDashboard
public class ApplicationSentence {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationSentence.class, args);
    }
}

4.Eureka Sentence WordServiceImpl在subject,adjective,noun上添加HystrixCommand注解并實(shí)現(xiàn)相應(yīng)的fallback邏輯.

@Service
public class WordServiceImpl implements WordService {

    @Autowired
    VerbClient verbClient;
    @Autowired
    SubjectClient subjectClient;
    @Autowired
    ArticleClient articleClient;
    @Autowired
    AdjectiveClient adjectiveClient;
    @Autowired
    NounClient nounClient;
   

    @Override
    @HystrixCommand(fallbackMethod="getFallbackSubject")
    public String getSubject() {
        return subjectClient.getWord();
    }



    @Override
    public String getVerb() {
        return verbClient.getWord();
    }

    @Override
    public String getArticle() {
        return articleClient.getWord();
    }

    @Override
    @HystrixCommand(fallbackMethod="getFallbackAdjective")
    public String getAdjective() {
        return adjectiveClient.getWord();
    }

 
    @HystrixCommand(fallbackMethod="getFallbackNoun")
    public String getNoun() {
        return nounClient.getWord();
    }

    public String getFallbackSubject() {
        return "某人";
    }

    public String getFallbackAdjective() {
        return "";
    }

    public String getFallbackNoun() {
        return "某物";
    }
}

5.依次啟動(dòng)Eureka Server,Eureka Client,Eureka Sentence,這個(gè)跟之前一樣造句,停掉subject,noun服務(wù),可以看到其可以走fallback邏輯.
6.使用異步和reactive形式的Hystrix,修改getSubject()為Future,修改getNoun()為Observable.SentenceServiceImpl也做相應(yīng)的修改.

@Service
public class WordServiceImpl implements WordService {

    @Autowired
    VerbClient verbClient;
    @Autowired
    SubjectClient subjectClient;
    @Autowired
    ArticleClient articleClient;
    @Autowired
    AdjectiveClient adjectiveClient;
    @Autowired
    NounClient nounClient;
    @Override
    @HystrixCommand(fallbackMethod = "getFallbackSubject")
    public Future getSubject() {
        return new AsyncResult() {
            @Override
            public String invoke() {
                return subjectClient.getWord();
            }
        };
    }

//    @Override
//    @HystrixCommand(fallbackMethod="getFallbackSubject")
//    public String getSubject() {
//        return subjectClient.getWord();
//    }



    @Override
    public String getVerb() {
        return verbClient.getWord();
    }

    @Override
    public String getArticle() {
        return articleClient.getWord();
    }

    @Override
    @HystrixCommand(fallbackMethod="getFallbackAdjective")
    public String getAdjective() {
        return adjectiveClient.getWord();
    }

    @Override
    @HystrixCommand(fallbackMethod="getFallbackNoun")
    public Observable getNoun() {
        return Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber observer) {
                try {
                    if (!observer.isUnsubscribed()) {
                        observer.onNext(nounClient.getWord());
                        observer.onCompleted();
                    }
                } catch (Exception e) {
                    observer.onError(e);
                }
            }
        });
    }
//    @HystrixCommand(fallbackMethod="getFallbackNoun")
//    public String getNoun() {
//        return nounClient.getWord();
//    }

    public String getFallbackSubject() {
        return "某人";
    }

    public String getFallbackAdjective() {
        return "";
    }

    public String getFallbackNoun() {
        return "某物";
    }
}

SentenceServiceImpl修改成下面

@Service
public class SentenceServiceImpl implements SentenceService {

    @Autowired WordService wordService;


    /**
     * Assemble a sentence by gathering random words of each part of speech:
     */
    public String buildSentence() {

        final List nounList = Lists.newArrayList();
        wordService.getNoun().subscribe(new Subscriber() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                nounList.add(s);
            }
        });

        try {
            return String.format("%s %s %s %s %s.", wordService.getSubject().get(), wordService.getVerb(),
                    wordService.getArticle(), wordService.getAdjective(), nounList.get(0));
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        return "error";
    }

}

7.查看Hystrix dashboard可以看到方法調(diào)用的統(tǒng)計(jì)信息
訪問(wèn)http://127.0.0.1:8020/hystrix并輸入http://127.0.0.1:8020/hystrix...可以查看Hystrix接口調(diào)用信息

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

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

相關(guān)文章

  • Hystrix 停止開(kāi)發(fā)。。。Spring Cloud 何去何從?

    摘要:棧長(zhǎng)得到消息,停止開(kāi)發(fā)了。。。是一個(gè)輕量級(jí)的容錯(cuò)組件,其靈感來(lái)自于,主要為和函數(shù)式編程設(shè)計(jì)的看到這里,棧長(zhǎng)表示學(xué)不動(dòng)了。。。上面說(shuō)了,官方推薦替代的開(kāi)源組件,這個(gè)棧長(zhǎng)也沒(méi)有用過(guò),查了下,資料也比較稀少。 showImg(https://segmentfault.com/img/remote/1460000017201104?w=1600&h=1066); 棧長(zhǎng)得到消息,Hystrix ...

    陸斌 評(píng)論0 收藏0
  • Spring Cloud Greenwich 正式發(fā)布,Hystrix 即將壽終正寢。。

    摘要:正式版在這天正式發(fā)布了,下面我們來(lái)看下有哪些更新內(nèi)容。生命周期終止提醒版本將于正式退役,具體可以參考官方宣布版本作為的主要版本,的生命周期也會(huì)由版本的終止而終止。進(jìn)入維護(hù)模式最近,宣布進(jìn)入維護(hù)模式停止開(kāi)發(fā)。。。 Spring Cloud Greenwich 正式版在 01/23/2019 這天正式發(fā)布了,下面我們來(lái)看下有哪些更新內(nèi)容。 生命周期終止提醒 Spring Cloud Edg...

    Magicer 評(píng)論0 收藏0
  • Spring Cloud 參考文檔(Hystrix超時(shí)和Ribbon客戶端)

    摘要:要運(yùn)行儀表板,請(qǐng)使用注解主類(lèi),然后訪問(wèn)并將儀表板指向客戶端應(yīng)用程序中的單個(gè)實(shí)例的端點(diǎn)。連接到使用的端點(diǎn)時(shí),必須信任服務(wù)器使用的證書(shū),如果證書(shū)不受信任,則必須將證書(shū)導(dǎo)入,以便儀表板成功連接到流端點(diǎn)。 Hystrix超時(shí)和Ribbon客戶端 使用包裝Ribbon客戶端的Hystrix命令時(shí),要確保將Hystrix超時(shí)配置為長(zhǎng)于配置的Ribbon超時(shí),包括可能進(jìn)行的任何可能的重試,例如,如果...

    pf_miles 評(píng)論0 收藏0
  • 深入理解Spring Cloud與微服務(wù)構(gòu)建【二】 - 2.2 Spring Cloud

    摘要:負(fù)載均衡組件是一個(gè)負(fù)載均衡組件,它通常和配合使用。和配合,很容易做到負(fù)載均衡,將請(qǐng)求根據(jù)負(fù)載均衡策略分配到不同的服務(wù)實(shí)例中。和配合,在消費(fèi)服務(wù)時(shí)能夠做到負(fù)載均衡。在默認(rèn)的情況下,和相結(jié)合,能夠做到負(fù)載均衡智能路由。 2.2.1 簡(jiǎn)介 Spring Cloud 是基于 Spring Boot 的。 Spring Boot 是由 Pivotal 團(tuán)隊(duì)提供的全新 Web 框架, 它主要的特點(diǎn)...

    Rocko 評(píng)論0 收藏0
  • 2021 年最新基于 Spring Cloud 的微服務(wù)架構(gòu)分析

    摘要:是一個(gè)相對(duì)比較新的微服務(wù)框架,年才推出的版本雖然時(shí)間最短但是相比等框架提供的全套的分布式系統(tǒng)解決方案。提供線程池不同的服務(wù)走不同的線程池,實(shí)現(xiàn)了不同服務(wù)調(diào)用的隔離,避免了服務(wù)器雪崩的問(wèn)題。通過(guò)互相注冊(cè)的方式來(lái)進(jìn)行消息同步和保證高可用。 Spring Cloud 是一個(gè)相對(duì)比較新的微服務(wù)框架,...

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

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

0條評(píng)論

閱讀需要支付1元查看
<