Java 为什么异步http客户端不限制我的请求?

Java 为什么异步http客户端不限制我的请求?,java,queue,akka,future,asynchttpclient,Java,Queue,Akka,Future,Asynchttpclient,我有一个拥有AsyncHttpClient的Akka演员。此参与者必须处理大量异步请求。因为我的系统不能同时处理数千个请求,所以我需要限制并发请求的数量 现在,我正在这样做: AsyncHttpClientConfig config = new AsyncHttpClientConfig.Builder().setAllowPoolingConnection(true)

我有一个拥有AsyncHttpClient的Akka演员。此参与者必须处理大量异步请求。因为我的系统不能同时处理数千个请求,所以我需要限制并发请求的数量

现在,我正在这样做:

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
      }
   }
);
Future f=httpClient.prepareGet(url)。执行(
新的AsyncCompletionHandler(){
@凌驾
未完成的公共整数(响应)引发异常{
//处理成功的请求
}
@凌驾
可滚动的公共空间(可丢弃的t){
//处理失败的请求
}
}
);
问题在于,请求从未放入客户机队列中,并且都像配置无关紧要一样进行处理。为什么它不能正常工作

来自维护者:

setMaxConnectionsPerHost
仅限制可以打开到给定主机的连接数。对于可能需要连接但没有可用连接的请求,没有内置的排队机制

所以基本上,这是一个硬限制。此外,我相信在1.9.10之前的库版本中,
maximumConnectionsPerHost
字段没有被代码正确地用于限制每个主机的并发连接数。相反,有一个bug,客户端只查看
maximumConnectionsTotal
字段


您是否单独测试了配置?这是在一个单独的主应用程序或单元测试中进行的,这样您就可以知道问题是在AsyncHttpClient中还是在Actor中的某个地方。