Open
Description
hi,when i use this code , i found MaxConnectionSemaphore don`t release,cause TooManyConnection Excetion.
DefaultAsyncHttpClientConfig config = new DefaultAsyncHttpClientConfig.Builder().setConnectTimeout(60000)
.setReadTimeout(60000).setRequestTimeout(60000).setMaxConnections(200).setMaxRequestRetry(3).setAcquireFreeChannelTimeout(60000).build();
AsyncHttpClient asyncHttpClient = Dsl.asyncHttpClient(config);
while (true) {
String requestUrl ="http://xxx:8080/hello?name=san";
CompletableFuture<Response> future = asyncHttpClient.prepareGet(requestUrl).execute(new HttpCompletionHandler()).toCompletableFuture();
future.whenComplete((response, throwable) -> {
if (throwable == null) {
// System.out.println(response.getResponseBody());
} else {
if (throwable instanceof TimeoutException) {
System.err.println(throwable.getMessage());
} else {
// 请求失败
throwable.printStackTrace();
}
}
});
// });
}
change code like this maybe resolve this problem, is it correct?
NettyConnectListener.java
public void onSuccess(Channel channel, InetSocketAddress remoteAddress) {
if (connectionSemaphore != null) {
// transfer lock from future to channel
**//Object partitionKeyLock = future.takePartitionKeyLock();
//change this code
Object partitionKeyLock = future.getPartitionKey();**
if (partitionKeyLock != null) {
channel.closeFuture().addListener(future -> connectionSemaphore.releaseChannelLock(partitionKeyLock));
}
}
Metadata
Metadata
Assignees
Labels
No labels