springcloud org.apache.catalina.connector.ClientAbortException: java.io.IOException
阿新 • • 發佈:2021-01-11
今天產品測試同事在測試平臺上測出了一個bug。就是在學習專案中新增一場考試的時候,新增不成功。
於是我先去檢視考試微服務的報錯資訊,並在本地環境復現,確實存在這樣的bug,如下:
因為該介面是提供給另外一個服務呼叫的,所以初步判斷是介面業務邏輯處理時間長導致的超時。
產品的技術棧是springcloud,在網管gateway中有各個子服務的路由轉發,這裡是前端跟後端建立的連線,如果gatewaay超時,則會響應給前端504。但這裡前端響應的是後端提供的錯誤碼。
所以應該是服務消費方出了問題,檢視服務消費方的日誌,如下:
確實顯示的也是請求超時問題。
在微服務中遠端呼叫都是基於ribbon進行http請求呼叫的,所以在服務消費方添加了如下配置,設定超時時間:
ribbon: ReadTimeout: 60000 ConnectTimeout: 60000
再次呼叫就Ok了。
當然,服務提供方首先要保證自己提供的介面業務處理時長不能過長。
減少處理時長可以有如下常用方法:
- 如果有多個sql需要執行,想辦法整成一個sql,減少跟資料庫的互動;
- 對應的sql也需要加上需要的索引,減少sql執行時長;
- 比較耗時的業務邏輯,又不需要響應給服務消費方,可以採用非同步io非阻塞的辦法,即開始新執行緒進行處理。