功能:向使用者提供區間可查詢,使用者輸入時間區間,或者其他特定引數,後端呼叫底層平台獲取資料後再進行業務處理、分頁等封裝以便展示。
問題:1. 當使用者輸入時間區間過大可能會導致跨平台查詢底層資料量過大,查詢速度慢、超時、撐爆記憶體,進而造成服務卡死或宕機。2. 由於資料量的多少和時間區間的長短並無之間聯絡(資料量多少與業務有關,有時候一秒內幾千筆,而有時候數小時內都可能無記錄),因此輸入區間限制不宜在前端控制,而後端接收引數後也需跨平台呼叫介面,後端業務層入口也無法做範圍限制。
願景:我們需要對查詢介面做超時處理,即查詢有結果立即返回,若查詢耗時超過30秒之後無論是否有結果也立即返回。
該功能實現的業務層中開啟執行緒池,啟動兩個執行緒來分別執行查詢任務和監控超時打斷任務。
技術思路
**實現
查詢任務task類
public
class
rangequerytask
implements
callable
@override
public list call()
throws exception
catch
(exception e)
return
newarraylist()
;}}
守護任務task類
public
class
rangequerydemontask
implements
callable
@override
public integer call()
throws exception
catch
(interruptedexception e)
finally
//此處將超時異常拋給前端處理
throw
newbussines***ception
(enumerrorinfo.qry_timeout.
getcode()
,enumerrorinfo.qry_timeout.
getmsg()
);}return null;
}}
業務層處理邏輯
threadpoolexecutor threadpoolexecutor = null;
list resultlist;
try}
}catch
(exception e)
finally
}return resultlist;
本**親測有效,現已上線,執行穩定。 微服務後端娛樂指南
delflag,刪除標誌,一般用於記錄某一條記錄的狀態,為正常顯示,1為刪除狀態。list列表引數,毫無疑問,我所用的所有list型別的引數都是整形的,也就是填寫數字即可 list引數在具體的介面中,只有兩種形式,一種array integer long 另一種就是json型別。arrry型別一行一...
Zuul超時問題,微服務響應超時,zuul進行熔斷
是這樣的,今天碰到了微服務響應超時問題,而且超時時間特別短,2秒就超時,zuul就走熔斷了。我採用zuul作為閘道器,根據不同的訪問路徑進行微服務的路由,譬如有個服務是user,我訪問user服務的某個介面時,該介面執行時間很慢,2秒多,然後還沒執行完,zuul就執行熔斷了,進入了我配好的zuulf...
微服務的超時 斷路器 艙壁概念
超時 如果等待太長時間決定呼叫失敗,整個系統會被拖慢,如果超時太短,會將乙個可能還在正常工作的呼叫認為是失敗的,如果沒有超時,乙個宕掉的的下游服務可能會讓整個系統掛起。所以給所有的跨程序呼叫設定超時,設定乙個預設超時時間,當超時事件發生,檢視日誌,根據實際情況進行相應的調整。斷路器 斷路器是跨服務呼...