頻繁的呼叫provider接太浪費了, 就有了將多個請求合併為乙個請求的方式。
首先在provider中提供乙個請求合併的介面:
@restcontroller
public
class
usercontroller")
public list
getuserbyids
(@pathvariable string ids)
return user;
}}
然後在hystrix中定義userservice:
@service
public
class
userservice
", user.
class
, stringutils.
join
(ids,
","));
return arrays.
aslist
(users);}
}
接下來定義 userbatchcommand ,相當於我們之前的 hellocommand:
public
class
userbatchcommand
extends
hystrixcommand
>
@override
protected list
run()
throws exception
}
public
class
usercollapsecommand
extends
hystrixcollapser
, user, integer>
/** * 請求引數
** @return
*/@override
public integer getrequestargument()
/** * 請求合併的方法
** @param collection
* @return
*/@override
protected hystrixcommand
>
createcommand
(collection
> collection)
return
newuserbatchcommand
(ids, userservice);}
/** * 請求結果分發
** @param users
* @param collection
*/@override
protected
void
mapresponsetorequests
(list
users, collection
> collection)
}}
然後測試呼叫:
("/hello5"
)public
void
hello5()
throws executionexception,interruptedexception
@service
public
class
userservice
)public future
getuserbyid
(integer id)
@hystrixcommand
public list
getusersbyids
(list
ids)
", user.
class
, stringutils.
join
(ids,
","));
return arrays.
aslist
(users);}
}
測試方法:
/**
* 註解方式實現請求合併 測試方法
* @throws executionexception
* @throws interruptedexception
*/("/hello6"
)public
void
hello6()
throws executionexception, interruptedexception
小結 :@hystrixcollapser(batchmethod = 「getuserbyids」,collapserproperties = )
@hystrixcommand
hystrix請求合併原理
在複雜的分布式系統架構中,每個服務都有很多的依賴服務,而每個依賴服務都可能會故障,如果服務沒有和自己的依賴服務進行隔離,那麼可能某乙個依賴服務的故障就會拖垮當前這個服務 舉例來說 某個服務有 30 個依賴服務,每個依賴服務的可用性非常高,已經達到了 99.99 的高可用性 那麼該服務的可用性就是 9...
Hystrix 請求快取實戰
在 hystrix 執行流程 中,我們說到在執行command的時候會先檢查是否開啟快取,若開啟快取,且快取中有資料時,就直接返回結果。今天,我們就通過實戰看下這說的是什麼意思。一 建立command 重寫getcachekey方法,返回乙個string型別的值作為快取的key。public cla...
Hystrix的介紹和簡單使用
這週在看專案的相關 時,接觸到了hystrix,因此查詢了相關資料學習了下。一 什麼是hystrix hystrix是netflix針對微服務分布式系統的熔斷保護中介軟體,當我們的客戶端連線遠端的微服務時,有兩種情況需要考慮 首先,如果遠端系統當機了我們怎麼辦?其次,我們如何管理對遠端微服務的呼叫效...