Как я могу освободить пул соединения при использовании реактора tcpclient
Когда я использую TCP-клиент с фиксированным ConnectionProvider, я не могу повторно использовать соединение.
Они сделали подключение превышает переменную maxConnection.
Это то, что я написал.
Даже если я использую 10 maxConnection, например "ConnectionProvider.fixed("TEST", 10)"), существует 22 незанятых соединения. О, мой бог
//NettyClient.java
@AllArgsConstructor
public class NettyClient {
private final int port;
public final ConnectionProvider connectionProvider = ConnectionProvider.fixed("TEST", 10);
public void sendTest() {
TcpClient c = TcpClient
.create(connectionProvider)
.port(port)
.handle((in, out) -> {
return out
.sendString(Mono.just("string"))
.then(in
.receive()
.asString()
.flatMap(ss -> {
out.withConnection(connection -> {
connection.disposeNow();
});
return Mono.empty();
}));
})
.option(ChannelOption.SO_KEEPALIVE, true)
.wiretap(true);
c.connect().subscribe();
}
}
//NettyClientTest.java
public class NettyClientTest {
@Test
public void send() throws InterruptedException {
NettyClient nettyClient = new NettyClient(11);
for (int i = 0; i < 20; i++) {
nettyClient.sendTest();
}
nettyClient.sendTest();
nettyClient.sendTest();
}
}
14: 55: 27.397 [реактор-tcp-nio-5] ОТСУТСТВИЕ АНТИКВАРИТНОГО РЕКЛАМНОГО РЕДАКТОРА. R:/0:0:0:0:0:0:0:1:33333] Канал очищен, теперь 0 активных соединений и 22 неактивных соединения
1 ответ
В приведенном вами примере вы делаете следующее:
out.withConnection(connection -> {
connection.disposeNow();
});
Поэтому каждый раз, когда вы получаете ответ от сервера, вы закрываете соединение. Поскольку к серверу поступило 22 запроса, вы будете использовать 22 соединения для выполнения теста. Каждое соединение сначала возвращается в пул, а затем немедленно закрывается, потому что вы запросили это.
В журналах Reactor Netty отсутствовал именно журнал, когда соединение было закрыто, поэтому я добавил такой журнал. Если вы попробуете версию 0.8.6.BUILD-SNAPSHOT, вы сможете увидеть в конце теста:
10:36:42.341 [reactor-tcp-nio-3] DEBUG r.n.r.PooledConnectionProvider - [id: 0x0dad123c, L:/0:0:0:0:0:0:0:1:51530 ! R:/0:0:0:0:0:0:0:1:8080] Channel closed, now 0 active connections and 0 inactive connections