Я настроил TcpClient, как описано в примерах, здесь. Я пытаюсь сделать следующий код устойчивым в ситуациях, когда сервер неожиданно закрывает соединение:
TcpClient tcpClient = getTcpClient();
public Mono<String> sendMessage(Mono<bytes[]> request) {
Connection connection = getConnectionFromPool(tcpClient);
return connection
.outbound()
.sendByteArray(request)
.then()
.then(connection.inbound().receive().asString().as(Mono::from));
}
В таком случае я ожидаю, что метод getConnectionFromPool сможет получить соединение из пула или открыть новое, если оно недоступно.
Заметив, что .connect () в конечном итоге переключается на ConnectionProvider.acquire (), я попытался использовать tcpClient.connect (), но возникла необходимость изменить тип возвращаемого значения метода следующим образом:
public Mono<Mono<String>> sendMessage1(Mono<String> request) {
return this.tcpClient
.connect()
.map(connection ->
connection
.outbound()
.sendByteArray(request.map(String::getBytes))
.then()
.then(connection.inbound().receive().asString().as(Mono::from))
);
}
Ясно, что это нежелательно. Как получить экземпляр подключения непосредственно из пула? Есть ли простой оператор Mono, который мне не хватает, или я неправильно использую API TcpClient?
Большое спасибо за любую помощь.