基於本地快取的 fallback 降級機制

2021-09-25 22:35:56 字數 1535 閱讀 9508

hystrix 出現以下四種情況,都會去呼叫 fallback 降級機制:

hystrixcommand,降級邏輯的書寫,是通過實現 getfallback() 介面;而在hystrixobservablecommand中,則是實現 resumewithfallback() 方法。

現在,我們用乙個簡單的栗子,來演示 fallback 降級是怎麼做的。

比如,有這麼個場景。我們現在有個包含 brandid 的商品資料,假設正常的邏輯是這樣:拿到乙個商品資料,根據 brandid 去呼叫品牌服務的介面,獲取品牌的最新名稱 brandname。

假如說,品牌服務介面掛掉了,那麼我們可以嘗試從本地記憶體中,獲取乙份稍過期的資料,先湊合著用。

本地獲取品牌名稱的**大致如下。

/**

* 品牌名稱本地快取

* */

public class brandcache

/*** brandid 獲取 brandname

** @param brandid 品牌id

* @return 品牌名

*/public static string getbrandname(long brandid)

在 getbrandnamecommand 中,run() 方法的正常邏輯是去呼叫品牌服務的介面獲取到品牌名稱,如果呼叫失敗,報錯了,那麼就會去呼叫 fallback 降級機制。

這裡,我們直接模擬介面呼叫報錯,給它丟擲個異常。

而在 getfallback() 方法中,就是我們的降級邏輯,我們直接從本地的快取中,獲取到品牌名稱的資料。

/**

* 獲取品牌名稱的command

* */

public class getbrandnamecommand extends hystrixcommand

@override

protected string run() throws exception

@override

protected string getfallback()

}

fallbackisolationsemaphoremaxconcurrentrequests用於設定 fallback 最大允許的併發請求量,預設值是 10,是通過 semaphore 訊號量的機制去限流的。如果超出了這個最大值,那麼直接 reject。

在 cachecontroller 中,我們通過 productinfo 獲取 brandid,然後建立 getbrandnamecommand 並執行,去嘗試獲取 brandname。這裡執行會報錯,因為我們在 run() 方法中直接丟擲異常,hystrix 就會去呼叫 getfallback() 方法走降級邏輯。

@controller

public class cachecontroller

}

關於降級邏輯的演示,基本上就結束了。

前端快取之本地快取

之前說了http快取,今天說說本地快取。本地快取也是平時開發過程經常用的。本地快取就簡單多了,我們常用的有三個 cookie localstorage sessionstorage。cookie 一般用來儲存使用者資訊,每次請求的時候內容都會自動被傳遞給伺服器。不同瀏覽器對於cookie的大小並不統...

本地快取localstorage

cookie,localstorage,sessionstorage都可以實現客戶端儲存,三者的區別有哪些了?cookie作為最早期的被設計web瀏覽器儲存少量資料,從底層看,它是作為http協議的一種擴充套件實現。cookie資料會自動在web瀏覽器和web伺服器之間傳輸資料。cookie有效期 ...

C 本地快取

1.什麼是快取?快取就是資料交換的緩衝區 又稱作cache 當某一硬體要讀取資料時,會首先從快取中查詢需要的資料,找到了則直接執行,找不到的話則從記憶體中查詢。由於快取的執行速度比記憶體快得多,故快取的作用就是幫助硬體更快地執行。因為快取往往使用的是ram 斷電即掉的非永久性儲存 所以在用完後還是會...