我有类似于以下示例的代码:
Mono<ResponseEntity<String>> result = webClient
.post()
.body(Mono.just(command), MyCommand.class)
.exchange()
.timeout(calculateTimeout(command))
.flatMap(clientResponse -> clientResponse.toEntity(String.class));
使用exchange()时,必须始终使用ClientResponse的任何body或toEntity方法来确保释放资源并避免HTTP连接池的潜在问题 . 如果没有预期的响应内容,您可以使用bodyToMono(Void.class) . 但请记住,如果响应确实包含内容,则连接将关闭,并且不会放回池中 .
问题:如果在上面的代码中由超时(...)触发了TimeoutException,我是否必须明确地执行某些操作以确保正确释放所有资源或者上面的代码是否足够?我想避免在这里发生内存泄漏 .
1 回答
在这种情况下,我不认为这是一个问题 .
触发时,
timeout
将cancel()
上游,有效关闭连接而不将其返回到连接池 . 你不应该是内存泄漏(除了已经存在于reactor内部队列中的缓冲区,这是Spring Framework将在_280621中解决的问题) .