Удаление ответа необходимо для повторного использования соединения для будущих запросов (т. Е. HTTP keep-alive / постоянные соединения).
Для возврата пустого Mono
, которое завершается после слива тела (игнорирование ошибок):
// drain the body
response.body(BodyExtractors.toDataBuffers())
// release DataBuffers
.doOnNext(DataBufferUtils::release)
// ignore errors
.onErrorResume(exception -> Mono.empty())
// return an empty Mono
.then();
Для возврата пустого Mono
, который немедленно завершается, и асинхронного слива тела (игнорирование ошибок) в фоновом режиме:
Mono.<Void>empty()
.doOnSubscribe(s ->
// drain the body
response.body(BodyExtractors.toDataBuffers())
// release DataBuffers
.doOnNext(DataBufferUtils::release)
// initiate drain on a separate Scheduler
.subscribeOn(Schedulers.parallel())
// subscribe, and ignore errors
.subscribe())
Я бы все равнорекомендуем первый вариант, поскольку он немедленно освобождает ресурсы и, вероятно, это то, что разработчики WebClient
имели в виду при написании и документировании его использования.
Я никогда не использовал второй вариант в производственной системе.поэтому проведите собственное тестирование, чтобы убедиться, что пул http-соединений работает так, как вам нужно.Если вы используете реактор-нетто, вы можете включить ведение журнала отладки на reactor.netty.resources.PooledConnectionProvider
, чтобы сравнить два подхода.