當前位置:首頁 » 數據倉庫 » 如何配置統一服務降級
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何配置統一服務降級

發布時間: 2023-01-02 15:51:25

⑴ 對比rpc框架功能1——降級

降級功能基本是rpc框架的標配了,不過對比了一些rpc框架,發現實現方式還是挺不一樣的。

osp是提供了一個配置,如果配置服務為降級,那個這個服務的server端收到請求,直接返回一個降級對應的錯誤碼,client收到這個結果後,可以根據這個錯誤碼做處理,比如返回一些固定數據之類的。

優點:
1 降級配置方式非常靈活,可以根據請求來源配置是否降級。
2 能非常快速方便處理一些場景:比如唯品會大促的時候,把商品評論服務設置為降級,這樣就可以方便的關閉掉商品評論功能了。
3 不同的調用方可以根據降級錯誤碼來做不同的事情,非常的靈活。

缺點:
1 降級了的服務,還是會收到client的請求,對client和server還是有些壓力

sofa沒有看到明確的降級功能。
只是提供了自動故障剔除功能,但是這個功能只是修改server的流量權重,叫他為熔斷更加貼切。

bbo提供了一個mock功能,如果server返回異常的情況下,可以用mock數據替代。

⑵ 什麼是服務降級springCloud如何實現

服務降級,當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常運行。比如電商平台,在針對618、雙11等高峰情形下採用部分服務不出現或者延時出現的情形。

二、實現方式

我在spring Cloud項目中,使用了兩種方式處理降級操作。

(1)使用feign組件完成降級操作,到內容提供者無法提供服務時, 消費者會調用降級操作,返回服務不可用等信息,或者返回提前准備好的靜態頁面。 調用的降級處理方法如下:

1@Component

2public class FeignClientFallbackFactory implements FallbackFactory<SchealServiceHi> { 

3    //    列印日誌

4    private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class); 

5    //降級處理方式 

6    @Override 

7    public SchealServiceHi create(Throwable throwable) {

8        return new SchealServiceHi() { 

9            @Override

10            public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {

11                print.info("fallback; reason was:", throwable);

12                return "服務報錯了";

13            }

14        };

15    }

16}

(2)也可以使用zuul網關,在spring Cloud自定義一個類實現ZuulFallbackProvider介面,當出現問題,無法正常調用時 ,為服務提供回退響應。

1@Component

2public class MyfaultFallback implements FallbackProvider { 

3    @Override 

4    public String getRoute() {

5//        表示為哪個服務提供回退,此處表示所有微服務。

6        return "*"; 

7    } 



9    @Override

10    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {11        return new ClientHttpResponse() {

12            @Override

13            public HttpStatus getStatusCode() throws IOException {

14//                fallback返回的狀態碼

15                return HttpStatus.OK;

16            }

17

18            @Override

19            public int getRawStatusCode() throws IOException {

20                //數字類型的狀態碼,本例返回的是200

21                return this.getStatusCode().value();

22            }

23

24            @Override

25            public String getStatusText() throws IOException {

26                //狀態文本27                return "OK";

28            }

29

30            @Override

31            public void close() {

32

33            }

34

35            @Override

36            public InputStream getBody() throws IOException {

37//                響應體38                return new ByteArrayInputStream("用戶微服務不可用,請稍候再試".getBytes());

39            }

40

41            @Override

42            public HttpHeaders getHeaders() {

43                HttpHeaders headers = new HttpHeaders();

44                headers.setContentType(MediaType.APPLICATION_JSON);

45                MediaType mt = new MediaType("application",

46                        "json", Charset.forName("UTF-8"));

47                headers.setContentType(mt);

48                return headers;

49            }

50        };

51    }

52}

三、效果展示

當我們訪問zuul網關時,服務提供者沒有開啟,訪問不到,就會進行降級處理,顯示下面內容。

原文鏈接:https://zhuanlan.hu.com/p/69635613