一昼蛀、背景
??線上有個(gè)支付網(wǎng)關(guān)項(xiàng)目宴猾,突然發(fā)現(xiàn)大量httpclient報(bào)錯(cuò),該httpclient報(bào)錯(cuò)是我們主動(dòng)訪問(wèn)第三方時(shí)叼旋,報(bào)獲取連接超時(shí)錯(cuò)誤仇哆。而且都是同一個(gè)第三方渠道報(bào)錯(cuò),而其他第三方都沒(méi)有這個(gè)報(bào)錯(cuò)夫植。
??走查代碼發(fā)現(xiàn)讹剔,所有的http訪問(wèn),用的都是同一個(gè)httpclient详民。而因?yàn)槟硞€(gè)第三方渠道報(bào)錯(cuò)延欠,導(dǎo)致連接沒(méi)有被釋放,所以再次訪問(wèn)該渠道的時(shí)候就沒(méi)有連接了沈跨。那為什么其他共用該httpclient的渠道沒(méi)有收到影響呢由捎?這就要講一下下面幾個(gè)參數(shù)了。
二饿凛、HttpClient的幾個(gè)重要參數(shù)
MaxtTotal:整個(gè)連接池的大小
CONNECTION_TIMEOUT : 連接超時(shí)狞玛,指的是建立連接的超時(shí)時(shí)間
SO_TIMEOUT : 響應(yīng)超時(shí)软驰,連接建立以后,響應(yīng)的超時(shí)時(shí)間
CONN_MANAGER_TIMEOUT: 連接不夠的時(shí)候超時(shí)時(shí)間
DefaultMaxPerRoute:每個(gè)host的連接最大連接數(shù)心肪,因?yàn)檫@個(gè)參數(shù)锭亏,所以某個(gè)渠道出問(wèn)題以后,其他渠道的最大連接數(shù)不會(huì)有影響硬鞍。(當(dāng)然這個(gè)還是回到maxTotal最大連接池的限制)
設(shè)置http client的重試次數(shù)贰镣,默認(rèn)是3次,最好還是禁用
httpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));
還有更多的注意膳凝,請(qǐng)大神指教碑隆。
// TODO