摘要:實戰五概要什么是怎么用常見配置介紹什么是是分布式系統處理超時和錯誤的機制如下圖所示分布式系統中某個用戶請求依賴服務當此請求并發超過的時候服務處理速度變慢但是服務還是被調用大量請求會阻塞在服務器上影響其它整個服務在復雜的分布式架構的應用程序
Spring Cloud實戰(五)-Spring Cloud Netflix Hystrix 概要
什么是Spring Cloud Netflix Hystrix?什么是Spring Cloud Netflix Hystrix?
怎么用 Spring Cloud Netflix Hystrix?
Hystrix常見配置介紹
Spring Cloud Netflix Hystrix是分布式系統處理超時和錯誤的機制,如下圖所示,分布式系統中某個用戶請求依賴A,H,I,P服務.
當此請求并發超過50的時候,服務I處理速度變慢,但是服務I還是被調用.
大量請求會阻塞在Tomcat服務器上,影響其它整個服務.在復雜的分布式架構的應用程序有很多的依賴,都會不可避免地在某些時候失敗.高并發的依賴失敗時如果沒有隔離措施,當前應用服務就有被拖垮的風險.
Spring Cloud Netflix Hystrix就是隔離措施的一種實現,可以設置在某種超時或者失敗情形下斷開依賴調用或者返回指定邏輯,從而提高分布式系統的穩定性.
百說不如一run,構造一個例子來實現,例子要實現使用Hystrix的Fallback(失敗后)邏輯來處理錯誤情景
1.Eureka Server,和Eureka Client跟之前一樣,只需改造Eureka Sentence
2.Eureka Sentence 添加pom依賴
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注解并實現相應的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.依次啟動Eureka Server,Eureka Client,Eureka Sentence,這個跟之前一樣造句,停掉subject,noun服務,可以看到其可以走fallback邏輯.
6.使用異步和reactive形式的Hystrix,修改getSubject()為Future,修改getNoun()為Observable.SentenceServiceImpl也做相應的修改.
@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 FuturegetSubject() { 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 super String> 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 ListnounList = 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可以看到方法調用的統計信息
訪問http://127.0.0.1:8020/hystrix并輸入http://127.0.0.1:8020/hystrix...可以查看Hystrix接口調用信息
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65039.html
摘要:棧長得到消息,停止開發了。。。是一個輕量級的容錯組件,其靈感來自于,主要為和函數式編程設計的看到這里,棧長表示學不動了。。。上面說了,官方推薦替代的開源組件,這個棧長也沒有用過,查了下,資料也比較稀少。 showImg(https://segmentfault.com/img/remote/1460000017201104?w=1600&h=1066); 棧長得到消息,Hystrix ...
摘要:正式版在這天正式發布了,下面我們來看下有哪些更新內容。生命周期終止提醒版本將于正式退役,具體可以參考官方宣布版本作為的主要版本,的生命周期也會由版本的終止而終止。進入維護模式最近,宣布進入維護模式停止開發。。。 Spring Cloud Greenwich 正式版在 01/23/2019 這天正式發布了,下面我們來看下有哪些更新內容。 生命周期終止提醒 Spring Cloud Edg...
摘要:要運行儀表板,請使用注解主類,然后訪問并將儀表板指向客戶端應用程序中的單個實例的端點。連接到使用的端點時,必須信任服務器使用的證書,如果證書不受信任,則必須將證書導入,以便儀表板成功連接到流端點。 Hystrix超時和Ribbon客戶端 使用包裝Ribbon客戶端的Hystrix命令時,要確保將Hystrix超時配置為長于配置的Ribbon超時,包括可能進行的任何可能的重試,例如,如果...
摘要:負載均衡組件是一個負載均衡組件,它通常和配合使用。和配合,很容易做到負載均衡,將請求根據負載均衡策略分配到不同的服務實例中。和配合,在消費服務時能夠做到負載均衡。在默認的情況下,和相結合,能夠做到負載均衡智能路由。 2.2.1 簡介 Spring Cloud 是基于 Spring Boot 的。 Spring Boot 是由 Pivotal 團隊提供的全新 Web 框架, 它主要的特點...
摘要:是一個相對比較新的微服務框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統解決方案。提供線程池不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務器雪崩的問題。通過互相注冊的方式來進行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務框架,...
閱讀 2976·2023-04-25 19:45
閱讀 2694·2021-11-19 09:40
閱讀 698·2021-10-14 09:49
閱讀 2694·2021-09-30 09:47
閱讀 2222·2021-09-26 09:55
閱讀 1230·2021-09-22 16:01
閱讀 2814·2019-08-30 14:19
閱讀 710·2019-08-29 16:44