корутинами, то обязательно ли при создании WebClient запросов надо освобождать тело? Или и так сойдёт?
/**
* Release the body of this response.
* @return a completion signal
* @since 5.2
* @see org.springframework.core.io.buffer.DataBufferUtils#release(DataBuffer)
*/
Mono<Void> releaseBody();
Ты же вычитываешь Body? Если да — оно само должно release сделать после вычитки.
Зависит от мостика
Мостик в моём случае - kotlinx.coroutines.reactive.awaitFirst
А где это написано, не подскажите? 😁
А у чего этот метод дёргается? Если там ответ, который ещё полностью не скачан, то тело надо отдельно использовать или освобождать.
Там внутри bodyToMono есть drainResponse
который делает release
Ну смотрите, логика следующего характера. 1) Выполняется post запрос в духе .post() .uri { it.build(someMapOfParams) } .body(BodyInserters.fromObject(someBodyProps)) .exchange() .awaitFirst() 2) Идёт проверка бизнес ошибок в духе val statusCode = response.statusCode() when { statusCode.is5xxServerError -> throw SomeErrorException() else -> aggregateLogErrorBody(response, statusCode) } 3) Собстна пункт 1 оборачивается в try-catch, но сейчас не об этом. Если таки произошла ошибка и она не 500ка, то надо вытащить тело ошибки val errorResponse = response.bodyToMono(String::class.java).awaitFirst() Ну вот и после этого я состовляю ошибку с помощью стинги
в таком случае тебе самому надо делать release, да.
А как это определяется? Можно подробнее пж-та
Если вы большие файлы не тягаете (не похоже), проще ответ буферизовать сразу и не думать об этом больше. Я не знаю, как это там делается, но такая возможность наверняка есть.
Я не особо вникал (так как занят был). У тебя есть bodyToMono который делает release. Так что всё ок.
Вероятно ситуация зависит от версии, если верить этому ответу https://stackoverflow.com/questions/55671246/how-to-properly-drain-release-response-body-from-webflux-client/55672095
Понятия не имею, я просто открыл сорсы webClient и глянул что там и как.
Обсуждают сегодня