微服務後端查詢超時立即返回的處理方法

2021-10-11 02:46:29 字數 1379 閱讀 9362

功能:向使用者提供區間可查詢,使用者輸入時間區間,或者其他特定引數,後端呼叫底層平台獲取資料後再進行業務處理、分頁等封裝以便展示。

問題: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...

微服務的超時 斷路器 艙壁概念

超時 如果等待太長時間決定呼叫失敗,整個系統會被拖慢,如果超時太短,會將乙個可能還在正常工作的呼叫認為是失敗的,如果沒有超時,乙個宕掉的的下游服務可能會讓整個系統掛起。所以給所有的跨程序呼叫設定超時,設定乙個預設超時時間,當超時事件發生,檢視日誌,根據實際情況進行相應的調整。斷路器 斷路器是跨服務呼...