其實我自己也想出了答案。
在我的負載測試中,最初我們得到了「NoHttpResponseException,目標服務器@Somelink:PortNumber無法響應。」在loadtest期間,因爲httpClient維護持久連接,意味着同一個連接發送多個請求。這樣更有效率。有一個evictor線程,我們已經設置了一定的毫秒或秒。 evictor線程將在一定的毫秒後刪除空閒連接。在生產過程中,可能會出現空閒連接,因爲我們一直沒有交通。現在,在Load測試期間,由於我們始終將請求始終發送到客戶端服務器,因此連接不會空閒。因此,連接不會被驅逐,並且TTL屬性被設置爲默認值「-1」,這意味着無限(這對我的應用程序來說,對於每個應用程序而言都取決於開發人員設置的值)。
TTL是一個屬性,它定義連接必須處於活動狀態的時間長度,而不管它是否處於空閒狀態。如果該屬性設置爲「-1」,則連接將永遠保持活動狀態,或者至少在客戶端服務器關閉它之前保持活動狀態。客戶端服務器通常在一段時間後關閉連接。沒有服務器永遠保持連接。新的連接將始終建立。
在此期間,當客戶端關閉我們的連接時,我們的服務器將假定連接已建立,但客戶端未發送響應。因此它返回NoHttpResponseException,即目標服務器無法響應。添加TTL屬性將確保刪除任何持久連接,無論它是否處於空閒狀態。因此,我們將始終有一個防止NoHttpResponseException的新連接。
我希望這會有所幫助。