1 回答

TA貢獻1796條經(jīng)驗 獲得超7個贊
檢查以下屬性:spring.mvc.async.request-timeout =#異步請求處理超時之前的時間
此設(shè)置有助于進行其余的配線架配置
spring.mvc.async.request-timeout=1200000
但是,根本原因是,當(dāng)請求數(shù)量很大時,所有工作線程(200)都會占用上載打開的連接(2000)(控制器將MultipartFile作為參數(shù)并返回DeferredResult)
我認為DeferredResult
當(dāng)請求服務(wù)邏輯很快而業(yè)務(wù)邏輯很慢(在forkjoin.commonPool上運行)時,它就閃閃發(fā)光。它不太適合MultiPartFile上載(阻塞和緩慢),并且在文件大小較大時不適合,因為自從那時起響應(yīng)就不能快速恢復(fù)(如以上每秒響應(yīng)圖表中所示,僅在幾秒鐘后響應(yīng)就開始恢復(fù),因為打開了連接)是2000,而工人只有200)。如果增加了工作人員,則無論如何都會減輕異步處理的優(yōu)勢。
在這種情況下,請求處理(上傳和阻止)很慢,而業(yè)務(wù)邏輯很快。因此響應(yīng)已經(jīng)準備就緒,但是所有工作線程(200)忙于處理越來越多的請求,因此響應(yīng)沒有恢復(fù),因此超時了。
可能需要為DeferredResult提供單獨的池request serve
并response resume
進行異步處理?
添加回答
舉報