Я пытаюсь использовать пул соединений в netty, но у меня возникают проблемы с записью некоторых обработчиков ошибок. В моем исходном коде было что-то вроде следующего:
ChannelFuture connectFuture = bootstrap.connect(...);
connectFuture.addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
Однако ChannelPool.acquire
возвращает Future<Channel>
. Это означает, что при сбое операции доступ к каналу отсутствует, поэтому я не знаю, как его закрыть. Важно ли закрыть сбойный канал? Я предполагаю, что он все еще может удерживать некоторые системные ресурсы, даже если он не мог подключиться.
Я думаю, что соответствующий код находится в классе netty SimpleChannelPool
в notifyConnect
:
private void notifyConnect(ChannelFuture future, Promise<Channel> promise) throws Exception {
if (future.isSuccess()) {
Channel channel = future.channel();
handler.channelAcquired(channel);
if (!promise.trySuccess(channel)) {
// Promise was completed in the meantime (like cancelled), just release the channel again
release(channel);
}
} else {
promise.tryFailure(future.cause());
}
}
Здесь мы видим, что обещание, возвращаемое вызывающей стороне, не выполнено, но канал не распространяется.