我已经从 iterable 创建了一个并行通量。对于每个可迭代,我都必须进行休息调用。但是在执行时,即使任何一个请求失败,所有剩余的请求也会失败。我希望所有的请求都能被执行,无论失败或成功。
我目前正在使用 Flux.fromIterable 并使用 runOn 运算符
Flux.fromIterable(actions)
.parallel()
.runOn(Schedulars.elastic())
.flatMap(request -> someRemoteCall)
.sequential()
.subscribe();
我希望 iterable 中的所有请求都能被执行,无论失败或成功。但到目前为止,有些被执行了,有些则失败了。
我通常使用三种可能的方法来实现此目的:
- 使用 3 个参数版本
flatMap()
,其中第二个是mapperOnError
-eg. .flatMap(request -> someRemoteCall(), x->Mono.empty(), null)
;
- Use
onErrorResume(x -> Mono.empty())
作为单独的调用来忽略任何错误;
- Use
.onErrorResume(MyException.class, x -> Mono.empty()))
忽略某种类型的错误。
第二个是我默认使用的,因为我发现它最清楚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)