java - Reactor Java Flux 与 Mono
问题描述
我有以下场景要实施。通过用户 ID 获取作业列表,迭代作业,然后通过属性获取帐户条目,最后更新到帐户。
方法定义
Mono<Void> execute(List<String> users)
乔布斯道返回 Mono<List>
Mono<List<JobInfo>> getJobsByUser(String user)
class JobInfo {
String user;
String account;
}
获取帐户正在返回 Mono 列表,
Mono<List<Account>> getAccounts(String account)
我正在努力使用 Mono 无阻塞方式来做到这一点。我尝试使用块来做到这一点,但得到
block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-nio-
public Mono<Void> execute(List<String> users) {
users.forEach(user -> {
jobDao.getJobsByUser(user).block().stream().forEach(job -> {
accountDam.getAccounts(job.getAccount()).block().forEach(acc -> {
// update account
});
});
});
return Mono.empty().then();
}
解决方案
据我了解,您需要以下流程:
public Mono<Void> execute(List<String> users) {
return Flux.fromIterable(users)
.flatMap(user -> getJobsByUser(user))
.flatMapIterable(jobs -> jobs)
.flatMap(job -> accountDam.getAccounts(job.getAccount()))
.flatMapIterable(accounts -> accounts)
.flatMap(account -> updateAccount(account))
.then();
}
推荐阅读
- javascript - 尝试在反应组件的返回中使用 setstate 更新状态并获得“最大更新深度超出错误”?
- javascript - 如何使用简单的 html、css 和 javascript 生成一个简单的弹出框?
- javascript - 正则表达式忽略长度达到10后的数字
- nlp - 情绪分析 - 极性
- pytorch - 将 pytorch 模型转换为 core-ml 时出错
- c - 将固定大小的数组作为指针传递给函数时的警告
- hadoop - hdfs:现有文件上的“没有这样的文件或目录”
- java - 如何使用 MapStruct 在一个字段中应用 List?
- r - R 中的 H 查找 - 按标题名称合并数据
- django - 姜戈。查询数组参数