摘要:為了保證其高可用,單個(gè)服務(wù)又必須集群部署。為了解決這個(gè)問(wèn)題,就出現(xiàn)斷路器模型。一斷路器簡(jiǎn)介摘自官網(wǎng)已經(jīng)創(chuàng)建了一個(gè)名為的庫(kù)來(lái)實(shí)現(xiàn)斷路器模式。較底層的服務(wù)如果出現(xiàn)故障,會(huì)導(dǎo)致連鎖故障。當(dāng)對(duì)特定的服務(wù)的調(diào)用達(dá)到一個(gè)閥值是秒次斷路器將會(huì)被打開(kāi)。
轉(zhuǎn)載請(qǐng)標(biāo)明出處:
http://blog.csdn.net/forezp/a...
本文出自方志朋的博客
在微服務(wù)架構(gòu)中,我們將業(yè)務(wù)拆分成一個(gè)個(gè)的服務(wù),服務(wù)與服務(wù)之間可以相互調(diào)用(RPC)。為了保證其高可用,單個(gè)服務(wù)又必須集群部署。由于網(wǎng)絡(luò)原因或者自身的原因,服務(wù)并不能保證服務(wù)的100%可用,如果單個(gè)服務(wù)出現(xiàn)問(wèn)題,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)網(wǎng)絡(luò)延遲,此時(shí)若有大量的網(wǎng)絡(luò)涌入,會(huì)形成任務(wù)累計(jì),導(dǎo)致服務(wù)癱瘓,甚至導(dǎo)致服務(wù)“雪崩”。
為了解決這個(gè)問(wèn)題,就出現(xiàn)斷路器模型。
一、斷路器簡(jiǎn)介Netflix has created a library called Hystrix that implements the circuit breaker pattern. In a microservice architecture it is common to have multiple layers of service calls.
. ----摘自官網(wǎng)
Netflix已經(jīng)創(chuàng)建了一個(gè)名為Hystrix的庫(kù)來(lái)實(shí)現(xiàn)斷路器模式。 在微服務(wù)架構(gòu)中,多層服務(wù)調(diào)用是非常常見(jiàn)的。
較底層的服務(wù)如果出現(xiàn)故障,會(huì)導(dǎo)致連鎖故障。當(dāng)對(duì)特定的服務(wù)的調(diào)用達(dá)到一個(gè)閥值(hystric 是5秒20次) 斷路器將會(huì)被打開(kāi)。
斷路打開(kāi)后,可用避免連鎖故障,fallback方法可以直接返回一個(gè)固定值。
二、準(zhǔn)備工作基于上一篇文章的工程,首先啟動(dòng):
基于上一節(jié)的工程,啟動(dòng)eureka-server 工程;啟動(dòng)service-hi工程,它的端口為8762;
改造serice-ribbon 工程的代碼:
在pox.xml文件中加入:
org.springframework.cloud spring-cloud-starter-hystrix
在程序的入口類加@EnableHystrix:
@SpringBootApplication @EnableDiscoveryClient @EnableHystrix public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
改造HelloService類,加上@HystrixCommand,并指定fallbackMethod方法。
@Service public class HelloService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError") public String hiService(String name) { return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); } public String hiError(String name) { return "hi,"+name+",sorry,error!"; } }
啟動(dòng):service-ribbon 工程,當(dāng)我們?cè)L問(wèn)http://localhost:8764/hi?name...瀏覽器顯示:
hi forezp,i am from port:8762
此時(shí)關(guān)閉 service-hi ,工程,當(dāng)我們?cè)僭L問(wèn)http://localhost:8764/hi?name...,瀏覽器會(huì)顯示:
hi ,forezp,orry,error!
這就證明斷路器起作用了。
四、Feign中使用斷路器如果你使用了feign,feign是自帶斷路器的,并且是已經(jīng)打開(kāi)了。如果使用feign不想用斷路器的話,可以在配置文件中關(guān)閉它,配置如下:
feign.hystrix.enabled=false
基于service-feign我們?cè)诟脑煜?只需要在SchedualServiceHi接口的注解中加上fallback的指定類就行了:
@FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class) public interface SchedualServiceHi { @RequestMapping(value = "/hi",method = RequestMethod.GET) String sayHiFromClientOne(@RequestParam(value = "name") String name); }
SchedualServiceHiHystric類:
@Component public class SchedualServiceHiHystric implements SchedualServiceHi { @Override public String sayHiFromClientOne(String name) { return "sorry "+name; } }
啟動(dòng)四servcie-feign工程,打開(kāi)http://localhost:8765/hi?name...注意此時(shí)service-hi還沒(méi)打開(kāi),網(wǎng)頁(yè)顯示:
sorry forezp
打開(kāi)service-hi,網(wǎng)頁(yè)顯示;
hi forezp,i am from port:8762
這證明斷路器起到作用了。
五、Circuit Breaker: Hystrix Dashboard (斷路器:hystrix 儀表盤)
基于service-ribbon 改造下:
pom.xml加入:
org.springframework.boot spring-boot-starter-actuator org.springframework.cloud spring-cloud-starter-hystrix-dashboard
在主程序入口中加入@EnableHystrixDashboard注解,開(kāi)啟hystrixDashboard:
@SpringBootApplication @EnableDiscoveryClient @EnableHystrix @EnableHystrixDashboard public class ServiceRibbonApplication { public static void main(String[] args) { SpringApplication.run(ServiceRibbonApplication.class, args); } @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
打開(kāi)瀏覽器:訪問(wèn)http://localhost:8764/hystrix,界面如下:
點(diǎn)擊monitor stream,進(jìn)入下一個(gè)界面,訪問(wèn):http://localhost:8764/hi?name...
此時(shí)會(huì)出現(xiàn)監(jiān)控界面:
本文源碼下載:
https://github.com/forezp/SpringCloudLearning/tree/master/chapter4
circuit_breaker_hystrix
feign-hystrix
hystrix_dashboard
優(yōu)秀文章推薦:史上最簡(jiǎn)單的 SpringCloud 教程 | 終章
史上最簡(jiǎn)單的 SpringCloud 教程 | 第一篇: 服務(wù)的注冊(cè)與發(fā)現(xiàn)(Eureka)
史上最簡(jiǎn)單的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
勘誤:有人反映feign的熔斷器不起作用,springcloud版本的問(wèn)題,用這個(gè):
org.springframework.cloud spring-cloud-dependencies Camden.SR6 pom import
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69959.html
摘要:接下來(lái)繼續(xù)介紹三種架構(gòu)模式,分別是查詢分離模式微服務(wù)模式多級(jí)緩存模式。分布式應(yīng)用程序可以基于實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布訂閱負(fù)載均衡命名服務(wù)分布式協(xié)調(diào)通知集群管理選舉分布式鎖和分布式隊(duì)列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最簡(jiǎn)單的 SpringCloud 教程 | 第九篇: 服務(wù)鏈路追蹤 (Spring Cloud Sleuth) 史上最簡(jiǎn)單的 S...
摘要:它就是史上最簡(jiǎn)單的教程第三篇服務(wù)消費(fèi)者后端掘金上一篇文章,講述了通過(guò)去消費(fèi)服務(wù),這篇文章主要講述通過(guò)去消費(fèi)服務(wù)。概覽和架構(gòu)設(shè)計(jì)掘金技術(shù)征文后端掘金是基于的一整套實(shí)現(xiàn)微服務(wù)的框架。 Spring Boot 配置文件 – 在坑中實(shí)踐 - 后端 - 掘金作者:泥瓦匠鏈接:Spring Boot 配置文件 – 在坑中實(shí)踐版權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明出處本文提綱一、自動(dòng)配置二、自定義屬性三、ran...
摘要:創(chuàng)建過(guò)程同類似創(chuàng)建完如下通過(guò)注解表明自己是一個(gè)僅僅是不夠的,還需要在配置文件中注明自己的服務(wù)注冊(cè)中心的地址,配置文件如下需要指明這個(gè)很重要,這在以后的服務(wù)與服務(wù)之間相互調(diào)用一般都是根據(jù)這個(gè)。 轉(zhuǎn)載請(qǐng)標(biāo)明出處: http://blog.csdn.net/forezp/a...本文出自方志朋的博客 一、spring cloud簡(jiǎn)介 spring cloud 為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系...
摘要:集群系統(tǒng)中的單個(gè)計(jì)算機(jī)通常稱為節(jié)點(diǎn),通常通過(guò)局域網(wǎng)連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負(fù)責(zé)了。于是,小周和就變成了協(xié)作開(kāi)發(fā)。都是為了項(xiàng)目正常運(yùn)行以及迭代。 一、前言 只有光頭才能變強(qiáng) 認(rèn)識(shí)我的朋友可能都知道我這陣子去實(shí)習(xí)啦,去的公司說(shuō)是用SpringCloud(但我覺(jué)得使用的力度并不大啊~~)... 所以,這篇主要來(lái)講講SpringClou...
閱讀 2984·2023-04-26 00:23
閱讀 3399·2021-09-13 10:28
閱讀 2178·2021-08-31 14:18
閱讀 2885·2019-08-30 15:54
閱讀 1939·2019-08-30 15:43
閱讀 1276·2019-08-29 16:56
閱讀 2800·2019-08-29 14:16
閱讀 2054·2019-08-28 17:51