springcloud org.apache.catalina.connector.ClientAbortException: java.io.IOException


  今天產品測試同事在測試平台上測出了一個bug。就是在學習項目中添加一場考試的時候,添加不成功。

  於是我先去查看考試微服務的報錯信息,並在本地環境復現,確實存在這樣的bug,如下:

  

  因為該接口是提供給另外一個服務調用的,所以初步判斷是接口業務邏輯處理時間長導致的超時。

  產品的技術棧是springcloud,在網管gateway中有各個子服務的路由轉發,這里是前端跟后端建立的連接,如果gatewaay超時,則會響應給前端504。但這里前端響應的是后端提供的錯誤碼。

所以應該是服務消費方出了問題,查看服務消費方的日志,如下:

  確實顯示的也是請求超時問題。

  在微服務中遠程調用都是基於ribbon進行http請求調用的,所以在服務消費方添加了如下配置,設置超時時間:

ribbon:
  ReadTimeout: 60000
  ConnectTimeout: 60000

  再次調用就Ok了。

  當然,服務提供方首先要保證自己提供的接口業務處理時長不能過長。

  減少處理時長可以有如下常用方法:

  • 如果有多個sql需要執行,想辦法整成一個sql,減少跟數據庫的交互;
  • 對應的sql也需要加上需要的索引,減少sql執行時長;
  • 比較耗時的業務邏輯,又不需要響應給服務消費方,可以采用異步io非阻塞的辦法,即開始新線程進行處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM