java - WebClient 使用 ExchangeFilterFunctions 将处理程序添加到 Mono
问题描述
我想知道是否将向从 ExchangeFilterFunction 返回的 Mono 添加功能将应用于返回的最终 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();
我的问题是我是否可以移出其中的一些逻辑,例如错误处理和可能重试逻辑以及对 ExchangeFilterFunctions 的附加日志记录,如果我这样做,它们在放入 Flux 时仍然会被应用吗?
同样在 ExchangeFilterFunctions 中,我如何能够访问 SubscriberContext,因为在记录时我们需要的上下文中有数据,例如用于跟踪的请求的唯一 ID。
解决方案
推荐阅读
- javascript - 如何让浏览器在解析 HTML 标记之前执行一个 JS 脚本?
- java - 在 Project Reactor 中识别反应链中字节数组的来源
- ios - Groupme Oauth 会记住最后一个用户的凭据,而不是在 iOS 上显示新的登录屏幕?
- javascript - POST 请求中未发送条带卡令牌
- spring-boot - Spring Data Elasticsearch 自定义@Query 参数超过10个
- c# - 如何在运行时使用没有 UAC 提示的 Wix Installer 在 C# 中创建具有管理员权限的应用程序
- office-js - 获取表onChange事件的列名
- javascript - 将多个 Javascript 对象合并为一个。Stream.call(this) 做什么?
- c# - unity 通过脚本改变变换对象
- android - 是否有任何自动化工具可用于检查我的所有 Presenter 类是否都有测试类?