在《hystrix-執行流程》中,我們說到在執行command的時候會先檢查是否開啟快取,若開啟快取,且快取中有資料時,就直接返回結果。今天,我們就通過實戰看下這說的是什麼意思。
一、建立command
重寫getcachekey方法,返回乙個string型別的值作為快取的key。
public class commandusingrequestcache extends hystrixcommand
@override
protected boolean run()
@override
protected string getcachekey()
}二、執行command
public class commandusingrequestcachetest finally
context = hystrixrequestcontext.initializecontext();
try finally
}public static void main(string args)
}三、執行結果
四、總結
從上訴執行結果我們可以看到,第一次執行isresponsefromcache方法返回false,即表示不是從快取中獲取的資料。第二次為true表示從快取中直接返回結果。第三次返回false,理論上來說2已經在快取中,但為什麼這裡返回false?原來,在hystrix中有乙個概念,叫做請求上下文,即hystrixrequestcontext。commanda和commandb在同乙個請求上下文中,所以當commandb再次訪問時,就會直接取用快取中的資料。但是commandb執行結束之後,我們關閉了上下文,在執行commandc之前重新建立了乙個上下文,此時上下文中快取資料是為空的,這就解釋了為什麼commandc.isresponsefromcache()返回的結果為false了。
一般來說,在乙個web應用中,我們會在乙個filter裡面,對每乙個請求都施加乙個請求上下文,就是說tomcat容器內每一次請求就是一次請求上下文。然後在這次請求上下文中,我們會去執行n多**,呼叫n多依賴服務,有的依賴服務可能還會呼叫好幾次。在一次請求上下文中,如果有多個command,引數都是一樣的,呼叫的介面也是一樣的,其實結果可以認為也是一樣的。那麼這個時候,我們就可以讓第一次command執行,返回的結果,被快取在記憶體中,然後這個請求上下文中,後續的其他對這個依賴的呼叫全部從記憶體中取用快取結果就可以了。不用在一次請求上下文中反覆多次的執行一樣的command,提公升整個請求的效能。
hystrix專案實戰
閒話少說 總共分6步 1 新增hystrix依賴以及監控的依賴 org.springframework.cloud spring cloud starter hystrix 1.4.4.release org.springframework.boot spring boot starter actu...
Hystrix 簡單請求合併
頻繁的呼叫provider接太浪費了,就有了將多個請求合併為乙個請求的方式。首先在provider中提供乙個請求合併的介面 restcontroller public class usercontroller public list getuserbyids pathvariable string ...
hystrix請求合併原理
在複雜的分布式系統架構中,每個服務都有很多的依賴服務,而每個依賴服務都可能會故障,如果服務沒有和自己的依賴服務進行隔離,那麼可能某乙個依賴服務的故障就會拖垮當前這個服務 舉例來說 某個服務有 30 個依賴服務,每個依賴服務的可用性非常高,已經達到了 99.99 的高可用性 那麼該服務的可用性就是 9...