針對http介面訪問超時處理

2021-07-31 20:18:25 字數 1108 閱讀 2583

如果你參加過網際網路專案,那麼你一定知道,整個大的系統會被切成許多的子系統。子系統與子系統通過接**互。其中,通過http接**互,是非常常用的一種方式。那麼如果呼叫某個子系統的http介面超時了,該如何處理呢?下面列舉一下。

假設a系統有個方法methoda,會呼叫b系統的methodb這個http介面,如果mehoda不追求超快的響應速度,那麼你在呼叫methodb這個http介面時,可以增長超時時間,例如10秒超時。因為經常在某些時刻,由於網路原因或者系統原因,呼叫method會超時的。

預設設定

requestconfig config = requestconfig.custom().setconnecttimeout(1000).setsockettimeout(2000).build();

httpclient = httpclientbuilder.create().setmaxconntotal(20).setmaxconnperroute(20).setdefaultrequestconfig(config).build();

針對某個單個

設定

httpget httpget = new httpget(url);

if (connecttimeout != null && sockettimeout != null && connecttimeout > 200 && sockettimeout > 200)

如果第一次呼叫methodb超時了,那麼你可以嘗試多呼叫一次。當然前提是,methoda不追求超快的響應時間。

如果methoda需要很快的響應速度,那麼當呼叫methodb介面超時時,可以使用乙個佇列儲存本次失敗的記錄,然後使用乙個job每隔一段時間去掃這個佇列,看看是否有待處理的資料。 

備註:如果對方系統掛掉了,使用待處理佇列的方式,比較合適。

catch這個超時異常,然後記錄日誌後,丟擲這個異常,並把之前的資料回滾。讓對方的系統重新呼叫。 

備註:寧願沒有資料,也不要儲存髒資料。

如果你的業務方法中,需要呼叫對方的http介面,如果這個http介面不影響主流程的,那麼可以使用乙個執行緒,非同步呼叫對方的http介面,並把超時時間設定長一些。由於使用了非同步,主流程會立刻繼續走的。

支付介面響應超時處理

問題 呼叫第三方支付介面響應時間超過10秒,導致大量線上訂單因為超時失敗,該介面是實時返回結果的,而且不是一直都慢,是偶爾慢。解決方法 呼叫介面時設定超時時間,當介面超過9秒未返回結果,自動將改訂單設定為處理中,然後後由定時任務呼叫查詢介面。這樣就把,乙個實時返回結果的介面,當成乙個非同步的介面來用...

java中處理http連線超時

http是無狀態的連線,不像socket可以有timeout的異常,因此在判斷超時上一直比較困擾.這段時間做j2me的乙個小遊戲.用到了http連線,學習了論壇上說的一種方法.宣告乙個boolean公共變數,表明當前httpconnection是否得到伺服器回應。你的連線線程中在連線之前置這個變數為...

處理http連線超時的方法

宣告乙個boolean公共變數,表明當前httpconnection是否得到伺服器回應。你的連線線程中在連線之前置這個變數為false 另起乙個監視執行緒,拿到那個httpconnection的連線物件,並迴圈監視這個boolean公共變數。如果指定時間內 20秒後 你的boolean公共變數還是f...