java - 从 Flux 中收集所有错误
问题描述
我有一个Flux<Message>
, 和一个Mono<Void> process(Message m)
函数。该process
函数可以返回错误或不返回任何内容。我想process
并行调用该函数,并将所有有进程错误的 messageId 收集到List<String>
.
@Data
class Message {
String messageId;
String content;
}
Flux.just(new Message("A", "1"), new Message("B", "2"))
.flatMap(m ->
process(m).onErrorReturn(m.messageId)
)
但问题是我不能返回方法以外的Void
类型onErrorXXX
。
解决方案
您可以做的是拥有一个包含 messageId 和错误消息的包装器,如下所示:
@Value
private static class ProcessingError {
private final String id;
private final String message;
private final boolean hasError;
}
Flux.just(new Message("A", "1"), new Message("B", "2"))
.flatMap(m -> process(m).thenReturn(new ProcessingError(m.messageId, null, false))
.onErrorResume(th -> Mono.just(new ProcessingError(m.messageId, th.getMessage(), true))));
现在之后的通量flatMap
是 a Flux<ProcessingError>
,你可以只过滤一个,hasError = true
然后收集你想要的方式。
推荐阅读
- vue.js - Heroku 在部署 MEVN 应用程序时出现构建错误,为什么 heroku 显示 babel-loader 和 vue-loader 错误?
- r - 如何在 R 中测试预测变量的所有子集
- r - httr 有时会在 URL 中将“%”替换为“%25”
- python - algorithm - 通过特定顶点的路径查找
- javascript - 如何在 django forms.DateInput 值中获取更新的当前日期
- python - 将 numpy 记录保存和加载为多部分文件
- c# - Unity - 使文本扩展然后收缩,就像向用户弹出一样。我想引起用户注意他们的分数
- c - 为什么char指针在签名后可以增值?
- python - Python youtube搜索如何获取“链接”?
- excel - 电子邮件显示但不发送