問題:最近上線的產品一個接口,頻繁出現ConnectionPoolTimeoutException錯誤,排查后原因是存在未正常斷開的連接,導致連接route耗盡
解決方案:
1、將長連接修改為短連接
2、請求結束后主動斷開連接
HTTP/1.1逐漸停止了對keep-alive連接的支持,用一種名為持久連接的改進型設計取代了它。持久連接的目的與keep-alive連接的目的相同,但是工作機制更優些。HTTP/1.1就吃連接在默認情況下是激活的,除非特別指明,否則HTTP/1.1假定所有的連接都是持久的,要在事務處理結束之后將連接關閉,HTTP/1.1應用程序必須向報文中顯示地添加一個Connection:close首部。引用自:“https://www.cnblogs.com/chengdabelief/p/6686603.html”
HttpPost post = new HttpPost(); try { // post.setURI(URI.create(targetUrl)); post.setHeader(HttpHeaders.CONNECTION, "close"); //****其他業務邏輯代碼 } catch (HttpException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ post.releaseConnection(); }
注意:
post.setHeader(HttpHeaders.CONNECTION, "close"); 這一行確保連接釋放后能夠被關閉,從而解決等待連接池分配連接超時的問題