十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
本篇內容主要講解“Spring Cloud中Hystrix服務降級與異常處理的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Cloud中Hystrix服務降級與異常處理的方法是什么”吧!
公司主營業(yè)務:成都網站制作、成都網站設計、外貿營銷網站建設、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出瀘溪免費做網站回饋大家。
前面兩篇文章中,fallbackMethod所描述的函數(shù)實際上就是一個備胎,用來實現(xiàn)服務的降級處理,在注解中我們可以通過fallbackMethod屬性來指定降級處理的方法名稱,在自定義Hystrix請求命令時我們可以通過重寫getFallback函數(shù)來處理服務降級之后的邏輯。使用注解來定義服務降級邏輯時,服務降級函數(shù)和@HystrixCommand注解要處于同一個類中,同時,服務降級函數(shù)在執(zhí)行過程中也有可能發(fā)生異常,所以也可以給服務降級函數(shù)添加‘備胎’,如下:
@HystrixCommand(fallbackMethod = "error1")
public Book test2() {
return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);
}
@HystrixCommand(fallbackMethod = "error2")
public Book error1() {
//發(fā)起某個網絡請求(可能失?。?
return null;
}
public Book error2() {
return new Book();
}在實際開發(fā)中,并不是所有的請求都要提前預備好服務降級問題,如果我就是要將服務調用失敗的信息展示給用戶,那么此時就沒有必要添加斷路器了。
我們在調用服務提供者時有可能會拋異常,默認情況下方法拋了異常會自動進行服務降級,交給服務降級中的方法去處理,在自定義Hystrix請求命令的方式下,我們可以在getFallback方法中調用getExecutionException方法來獲取拋出的異常,舉個簡單的例子:
@Override
protected Book getFallback() {
Throwable executionException = getExecutionException();
System.out.println(executionException.getMessage());
return new Book("宋詩選注", 88, "錢鐘書", "三聯(lián)書店");
}
@Override
protected Book run() throws Exception {
int i = 1 / 0;
return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);
}此時訪問結果如下:
控制臺打印的日志如下:
自動進行了服務降級。
如果我們采用了注解的方式,只需要在服務降級方法中添加一個Throwable類型的參數(shù)就能夠獲取到拋出的異常的類型,如下:
@HystrixCommand(fallbackMethod = "error1")
public Book test2() {
int i = 1 / 0;
return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);
}
public Book error1(Throwable throwable) {
System.out.println(throwable.getMessage());
return new Book("百年孤獨", 33, "馬爾克斯", "人民文學出版社");
}
控制臺打印的日志也是/ by zero,我就不再貼圖片了。此時,如果有一個異常拋出后我不希望進入到服務降級方法中去處理,而是直接將異常拋給用戶,那么我們可以在@HystrixCommand注解中添加忽略異常,如下:
@HystrixCommand(fallbackMethod = "error1",ignoreExceptions = ArithmeticException.class)
public Book test2() {
int i = 1 / 0;
return restTemplate.getForObject("http://HELLO-SERVICE/getbook1", Book.class);
}
public Book error1(Throwable throwable) {
System.out.println(throwable.getMessage());
return new Book("百年孤獨", 33, "馬爾克斯", "人民文學出版社");
}此時執(zhí)行結果如下:
這里的實現(xiàn)原理很簡單,因為有一個名叫HystrixBadRequestException的異常不會進入到服務降級方法中去,當我們定義了ignoreExceptions為ArithmeticException.class之后,當拋出ArithmeticException異常時,Hystrix會將異常信息包裝在HystrixBadRequestException里邊然后再拋出,此時就不會觸發(fā)服務降級方法了。
到此,相信大家對“Spring Cloud中Hystrix服務降級與異常處理的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!