SpringCloud微服務(wù)之熔斷器Hystix

復(fù)雜分布式架構(gòu)通常都具有很多依賴,當(dāng)一個(gè)應(yīng)用高度耦合其他服務(wù)時(shí)非常危險(xiǎn)且容易導(dǎo)致失敗,當(dāng)某一個(gè)服務(wù)發(fā)生故障,導(dǎo)致請(qǐng)求延遲,將可能會(huì)在數(shù)秒內(nèi)導(dǎo)致所有應(yīng)用資源被耗盡。
在系統(tǒng)高峰時(shí)期,大量對(duì)微服務(wù)的調(diào)用可能會(huì)堵塞遠(yuǎn)程服務(wù)器的線程池,如果整個(gè)線程池沒有和主應(yīng)用服務(wù)器的線程池隔離,就可能會(huì)導(dǎo)致整個(gè)服務(wù)器掛機(jī)。
Hystrix使用自己的線程池,這樣和主應(yīng)用服務(wù)器線程池隔離,如果調(diào)用花費(fèi)很長(zhǎng)時(shí)間,會(huì)停止調(diào)用,不同的命令或命令組能夠被配置使用它們各自的線程池,可以隔離不同的服務(wù)。

熔斷器的原理

原理很簡(jiǎn)單,就像家里的電閘一樣,如果發(fā)生短路就能立即斷電,避免發(fā)生災(zāi)難。
在分布式系統(tǒng)中,服務(wù)調(diào)用方可以自己進(jìn)行判斷某個(gè)服務(wù)反應(yīng)慢或者存在大量超時(shí)的情況,能夠主動(dòng)熔斷,防止整個(gè)系統(tǒng)被拖垮。
Hystrix可以實(shí)現(xiàn)彈性容錯(cuò),當(dāng)情況好轉(zhuǎn)后,可以自動(dòng)重連。
熔斷之后,可以將后序的請(qǐng)求直接拒絕掉,一段時(shí)間后允許部分請(qǐng)求通過,如果調(diào)用成功,則恢復(fù),否則繼續(xù)斷開。
服務(wù)降級(jí),服務(wù)異常,不是粗暴的直接報(bào)錯(cuò),而是給一個(gè)友好的提示;服務(wù)繁忙時(shí),一些次要服務(wù)暫時(shí)中斷,優(yōu)先保證主要服務(wù)的暢通,一切資源優(yōu)先給主要服務(wù)使用,在雙十一、618時(shí),京東天貓都會(huì)采用這樣的策略。

Hystix的使用
  • 依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  • 開啟
@SpringBootApplication
@EnableHystrix
public class HystrixApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class);
    }
}
  • 回滾處理函數(shù)
@RestController
public class HelloController {

    @Autowired
    RestTemplate restTemplate;

    @GetMapping("/hello")
    //請(qǐng)求失敗就會(huì)回滾到處理函數(shù)error
    @HystrixCommand(fallbackMethod = "error")
    public String hello(){
        String result = restTemplate.getForObject("http://eureka-client-user/hello", String.class);
        System.out.println(result);
        return result;
    }

    public String error(){
        return "error...";
    }

}
  • 測(cè)試
    我們關(guān)閉一個(gè)eureka-client-user服務(wù),這個(gè)時(shí)候訪問


    error

    success
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容