您可以使用信号量来限制并发查询的数量:
final Semaphore semaphore = new Semaphore(numberOfConcurrentQueries);...semaphore.acquire();try { ResultSetFuture future = session.executeAsync("..."); Futures.addCallback(future, new FutureCallback<ResultSet>() { @Override public void onSuccess(ResultSet result) { semaphore.release(); } @Override public void onFailure(Throwable t) { semaphore.release(); } });} catch (Exception e) { semaphore.release();}
但是到最后,情况并没有太大的不同:
NoHostAvailableException信号量将阻塞(如果使用定时版本的Acquisition,则抛出该信号),而不是在超出容量时得到信号。因此,您可能还希望对触发这些查询的组件施加反压。
您可能还需要调整连接池以调整容量,请参阅我们的文档(适用于2.1,如果您使用的是2.0,请使用页面顶部的下拉列表)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)