2013-08-21 32 views
2

我有一個擁有AsyncHttpClient的Akka actor。這個actor必須處理很多異步請求。由於我的系統無法同時處理數千個請求,因此我需要限制併發請求的數量。爲什麼async-http-client不會限制我的請求?

現在,我這樣做:

AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder().setAllowPoolingConnection(true) 
                    .addRequestFilter(new ThrottleRequestFilter(32)) 
                    .setMaximumConnectionsPerHost(16) 
                    .setMaxRequestRetry(5) 
                    .build(); 
final AsyncHttpClient httpClient = new AsyncHttpClient(new NettyAsyncHttpProvider(config)); 

當我的演員收到一條消息,我用的是客戶端這樣的:

Future<Integer> f = httpClient.prepareGet(url).execute(
    new AsyncCompletionHandler<Integer>() { 
     @Override 
     public Integer onCompleted(Response response) throws Exception { 
     // handle successful request 
     } 

     @Override 
     public void onThrowable(Throwable t){ 
     // handle failed request 
     } 
    } 
); 

的問題是,請求從來沒有把在客戶端隊列和所有處理都像配置無關緊要。爲什麼不這樣做?

+0

您是否測試過配置獨立?這是在單獨的主應用程序或單元測試中,以便您可以知道問題出在AsyncHttpClient還是Actor的某處。 – Luciano

回答

1

從維護者:

setMaxConnectionsPerHost僅帽連接,可以是開放到一個給定的主機的數量。對於可能需要連接的請求,沒有可用的內置排隊機制。

所以基本上,這是一個硬限制。另外,在之前的庫中,我相信1.9.10,代碼沒有正確使用該字段來限制每個主機的併發連接數。相反,有一個錯誤,客戶端只查看maximumConnectionsTotal字段。

Link to issue referenced on GitHub

相關問題