我有类似于以下示例的代码:
Mono<ResponseEntity<String>> result = webClient
.post()
.body(Mono.just(command), MyCommand.class)
.exchange()
.timeout(calculateTimeout(command))
.flatMap(clientResponse -> clientResponse.toEntity(String.class));春季文献说:
在使用exchange()时,您必须始终使用ClientResponse的任何主体或ClientResponse方法,以确保资源被释放,并避免HTTP池可能出现的问题。如果不需要响应内容,则可以使用bodyToMono(Void.class)。但是,请记住,如果响应有内容,则连接将被关闭,并且不会被放回池中。
问题:如果超时触发了TimeoutException (.)和上面的代码一样,我需要做一些明确的事情来确保所有的资源都被正确地释放了,还是上面的代码足够了?我想避免这里的记忆泄露。
发布于 2018-08-22 08:06:40
我不认为这在本案中是个问题。
当触发时,timeout将向上游cancel(),从而有效地关闭连接,而不将其返回到连接池。您不需要在这里做任何特别的事情,也不会有内存泄漏(除了已经位于反应堆内部队列中的缓冲区,这是Spring将在SPR-17025中解决的一个问题)。
https://stackoverflow.com/questions/51937483
复制相似问题