@CacheResult、@CacheRemove、@HystrixCollapser理解和應用
@CacheResult
該註解用來標記請求命令返回的結果應該被快取,它必須與@HystrixCommand註解結合使用,eg:
@Override
@CacheResult
@HystrixCommand(commandKey=“getUserByNameCommandKey”)
@HystrixCollapser(batchMethod=“getUsersByNames”,collapserProperties= {
@HystrixProperty(name=“timerDelayInMilliseconds”,value=“1000”)
})
public String getUserByName(String name) {
System.out.println(“call EmallServiceImpl.getUserByName()
String json = sysFeignClient.getUserByName(name);
return json;
}
@CacheRemove
該註解用來讓請求命令的快取失效,失效的快取根據定義Key決定,eg:
@Override
@CacheRemove(commandKey=“getUserByNameCommandKey”)
@HystrixCommand
public void removeUserByNameCache(String name) {
System.out.println(“call EmallServiceImpl.removeUserByNameCache()
}
通過HystrixCollapser合併請求提高應用吞吐量
我們知道elasticsearch可以通過指定index和doc id來獲取某個doc的,也支援mget的方式,傳送一次請求,將多個doc id傳送過去查詢出相應的docs。
這樣做可以有效的減少發往ES的請求數,降低ES的負載。
在web應用層通過HystrixCollapser合併單個get請求為mget請求的處理方式,就能大大提升系統的TPS,eg:
@Override
@CacheResult
@HystrixCommand(commandKey=“getUserByIdCommandKey”)
@HystrixCollapser(batchMethod=“getUsersByIds”,collapserProperties= {
@HystrixProperty(name=“timerDelayInMilliseconds”,value=“1000”)
})
public String getUserById(String id) {
System.out.println(“call EmallServiceImpl.getUserById()
String json = sysFeignClient.getUserById(id);
return json;
}