Мне интересно, будет ли добавление функциональности к Mono, которое я возвращаю из ExchangeFilterFunction, применяться к последнему возвращаемому Mono. По сути, я хочу очистить часть своего клиентского кода, переместив некоторые проблемы из клиентского класса в ExchangeFilterFunctions, которые я могу добавить клиенту, но мой случай немного отличается от одного вызова.
В основном у меня есть что-то похожее на приведенный ниже код:
Flux.fromIterable(uris)
.parallel()
.runOn(Schedulers.parallel())
.flatMap(uri -> webClient.get()
.uri(uri)
.headers(headers -> headers.addAll(httpHeaders))
.retrieve()
.onStatus(
status -> status.is4xxClientError() || status.is5xxServerError(),
response -> response.bodyToMono(String.class)
.map(body -> new MyCustomException(body, response.statusCode())))
.bodyToMono(MyResponse.class)
.map(x -> Tuple.of(x, null))
.onErrorMap(ReadTimeoutException.class, th ->
new MyCustomException(ErrorResponseBuilder.buildError(th), HttpStatus.INTERNAL_SERVER_ERROR)))
.doOnEach(this::log)
.sequential();
Мой вопрос: могу ли я переместить некоторые из этих c logi, например, обработку ошибок и, возможно, повторить logi c и дополнительное ведение журнала к ExchangeFilterFunctions вместо этого, и если я это сделаю, будут ли они по-прежнему применяться при помещении в Flux?
Также в ExchangeFilterFunctions, как я смогу получить доступ к SubscriberContext, потому что есть данные в контексте, который нам нужен при регистрации, например уникальный идентификатор запроса, который используется для трассировки.