目的:提高可用性
通過ExecutorService實現隊列泄洪
//含有20個線程的線程池
private ExecutorService executorService = Executors.newFixedThreadPool(20);
將有并發壓力的下游代碼放入到線程池的submit方法中,如下:
//同步調用線程池的submit方法 簡單實現 擁塞窗口為20的隊列泄洪(一個服務器同一時間只能處理20個請求,其他請求隊列等待)
Future future = executorService.submit(new Callable() {
//此處調用有并發壓力的下游接口
}
return null;
}
});
try {
//獲取任務的執行結果
future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
通過Guava RateLimit 負載均衡的情況下,在單機內部實現限流
private RateLimiter orderCreateRateLimiter = RateLimiter.create(300);//限制300tps
在方法入口內加上以下代碼:
//入口處限流
if(!orderCreateRateLimiter.tryAcquire()){
//拋出異常;
}
最后:
這里只簡單描述了如何最簡單的使用,降低高并發對系統的壓力,沒有剖析內部源碼實現,望諒解
標簽:20,應對,隊列,submit,并發,限流,線程,java
來源: https://www.cnblogs.com/wuba/p/11516985.html