2013-10-18 88 views
1

背景:這是使用AIMDBackoffManager實例化HttpClient的正確方法嗎?

  1. 我使用的HttpClient(SolrJ)連接到Solr的服務。但問題與Solr沒有直接關係。

  2. 我在進行負載測試時遇到以下問題。

    引起:java.lang.IllegalStateException:無效的BasicClientConnManager的使用:連接仍然分配。

  3. SOF答案 - 使用連接池管理器

    Invalid use of BasicClientConnManager: connection still allocated

問:

我使用的PoolingHttpClientConnectionManager如下面的代碼。我不希望手動限制連接大小,而是使用AIMDBackoffManager來管理它。但是,我看到AIMDBackoffManager需要連接池作爲其參數。

public static final PoolingClientConnectionManager poolingConnectionManager = new PoolingClientConnectionManager(); 

public static DefaultHttpClient getHttpClient(){ 

    DefaultHttpClient httpClient = new DefaultHttpClient(poolingConnectionManager); 
    httpClient.setBackoffManager(new AIMDBackoffManager(poolingConnectionManager)); 

... 
... 

}

我GOOGLE了公平一點,但我無法找到的BackoffManager使用任何的例子。所以,這就是我所做的,但我並不興奮將連接管理器兩次傳遞給DefaultHttpClient。或者我不應該擔心考慮到我第一次將它傳遞給HttpClient並且第二次將它傳遞給BackoffManager

我使用的HttpClient-4.2.3

回答

1

我涉足這個深水爲好。我一直在研究如何使用ServiceUnavailableRetryStrategy,這在我的情況下似乎由於BackoffManager而失敗。我有一個印象,這不是一個完整的功能,因爲我不能谷歌它的使用,也沒有太多的HttpClient源代碼。

+0

同意@Peter。網上沒有太多的幫助。 –

+0

該功能的原始貢獻者從來沒有完全完成並記錄它。請參閱https://issues.apache.org/jira/browse/HTTPCLIENT-1101。我們會很樂意把PR加以改進。 – oleg

0

AIMDBackoffManager構造函數需要ConnPoolControl(連接管理器實現)。看看這個接口,你會看到它只返回池的路由特定統計信息,這是BackoffManager用來執行其任務的。

因此,在構建客戶端時,您不應該擔心連接管理器傳遞兩次,請注意AIMDBackoffManager獲取連接管理器的backOff和probe實現上的鎖定,您可以在source中看到該鎖定。

相關問題