天天看點

SpringCloud Alibaba實戰(9:Hystrix容錯保護)1、Hystrix簡介2、引入Hystrix3、測試Hystrix

源碼位址: https://gitee.com/fighter3/eshop-project.git 持續更新中……

在上一節我們已經使用OpenFeign完成了服務間的調用。想一下,假如我們一個服務鍊路上上下遊有十幾個服務,每個服務有若幹個節點,其中一個節點故障,上遊請求打到故障的節點,加入請求一直阻塞,大量堆積的請求可能會把服務打崩,可能導緻級聯式的失敗,甚至整個鍊路失敗,這就是所謂的

服務雪崩

,嚴重可能直接導緻系統挂掉。為了避免這種可怕的情況,必要的容錯保護機制是必需的。

SpringCloud Alibaba實戰(9:Hystrix容錯保護)1、Hystrix簡介2、引入Hystrix3、測試Hystrix

1、Hystrix簡介

Hystrix是Netflix的一個重要元件,提供了斷路器、資源隔離與自我修複功能。

如下是Hystrix作為斷路器,阻止級聯失敗。

但是Hystrix1.5.18版本之後進入了維護模式,我們采用的就是這個版本。在SpringCloud Alibaba的體系,有另外一個元件sentinel可以作為替代品,在後面我們會用到。

盡管Hystrix已經停止更新,但是經過多年疊代,目前已經是一個比較成熟的産品,是以仍然有比較廣泛的應用。

Hystrix在SpringCloud體系的使用也非常簡單,下面,我們開始吧!

2、引入Hystrix

仍然是用我們上節的例子。

  • 采用spring-cloud-starter的方式引入:
<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
      
  • 在application.yml開啟hystrix:
feign:
  hystrix:
    enabled: true      
  • 在服務啟動類加入@EnableHystrix注解,以使系統支援hystrix的功能。
@SpringBootApplication
@MapperScan("cn.fighter3.mapper")
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "cn.fighter3.client")
@EnableHystrix
public class EshopGoodsApplication {

    public static void main(String[] args) {
        SpringApplication.run(EshopGoodsApplication.class, args);
    }
}      
  • 編寫一個StockClientFallback類,實作StockClientFeign接口,這個類是用來幹什麼的呢?是用于Feign用戶端遠端調用失敗回調的。
/**
 * @Author 三分惡
 * @Date 2021/5/29
 * @Description 庫存服務回調異常回調類
 */
@Component
@Slf4j
public class StockClientFallback implements StockClientFeign {

    public Integer addStock(StockAddDTO stockAddDTO) {
        log.error("庫存服務-添加庫存不可用!");
        return 0;
    }

    public Integer getAccountById(Integer goodsId) {
        log.error("庫存服務-擷取庫存不可用!");
        return 0;
    }
}      
  • 在StockClientFeign中添加失敗回調配置,原來是

    @FeignClient(value = "stock-service")

@FeignClient(value = "stock-service", fallback = StockClientFallback.class)      

還有另外一種方式,可以在方法上使用

@HystrixCommand(fallbackMethod = "getDefaultUser")

來定義服務降級方法。

3、測試Hystrix

  • 依次啟動Nacos-Server、商品服務,注意,我們沒有啟動庫存服務
SpringCloud Alibaba實戰(9:Hystrix容錯保護)1、Hystrix簡介2、引入Hystrix3、測試Hystrix
  • 打開 http://localhost:8020/doc.html ,調用一下添加商品接口。想一下,正常情況下,會是什麼結果呢?由于庫存服務沒起,那麼連帶着商品服務也一定會傳回異常,但是加入了hystrix,發現,接口傳回成功的結果。
SpringCloud Alibaba實戰(9:Hystrix容錯保護)1、Hystrix簡介2、引入Hystrix3、測試Hystrix

看一下我們打的日志,發現回調的方法被調用了。

SpringCloud Alibaba實戰(9:Hystrix容錯保護)1、Hystrix簡介2、引入Hystrix3、測試Hystrix

好了,Hystrix實作斷路器到這就結束了。

持續更新中,敬請關注……

“簡單的事情重複做,重複的事情認真做,認真的事情有創造性地做!”——

我是三分惡,一個能文能武的全棧開發,咱們下期見!

繼續閱讀