Webflux 结合两个具有依赖性的 Monos
Webflux combine two Monos with dependency
我想创建一个 Spring-Webflux-Service,它将两个来源的数据与依赖项结合起来。我是 Webflux 的新手,所以我不知道该怎么做。这是一些伪代码来显示我正在尝试做的事情:
@Service
public class ServiceB {
private RepositoryB repositoryB;
private ServiceA serviceA;
public Mono<BigDecimal> calculate(UUID id) {
return repositoryB.findById(id)
.flatMap(b -> serviceA.find(b.getId()))
.flatMap((a, b) -> a + b);
}
repositoryB
的结果包括我要用serviceA
查找的数据的标识符。至少我想处理这两个数据集。我可以用什么方法代替第一个 flatMap
?
您可能想使用 Mono.zipWhen
,将两个 Monos
压缩成一个 Tuple
:
public Mono<BigDecimal> calculate(UUID id) {
return repositoryB.findById(id)
.zipWhen(b -> serviceA.find(b.getId())
.map(t -> t.getT1().add(t.getT2()));
}
另请注意,您不能将两个 BigDecimals
与 +
相加。
我想创建一个 Spring-Webflux-Service,它将两个来源的数据与依赖项结合起来。我是 Webflux 的新手,所以我不知道该怎么做。这是一些伪代码来显示我正在尝试做的事情:
@Service
public class ServiceB {
private RepositoryB repositoryB;
private ServiceA serviceA;
public Mono<BigDecimal> calculate(UUID id) {
return repositoryB.findById(id)
.flatMap(b -> serviceA.find(b.getId()))
.flatMap((a, b) -> a + b);
}
repositoryB
的结果包括我要用serviceA
查找的数据的标识符。至少我想处理这两个数据集。我可以用什么方法代替第一个 flatMap
?
您可能想使用 Mono.zipWhen
,将两个 Monos
压缩成一个 Tuple
:
public Mono<BigDecimal> calculate(UUID id) {
return repositoryB.findById(id)
.zipWhen(b -> serviceA.find(b.getId())
.map(t -> t.getT1().add(t.getT2()));
}
另请注意,您不能将两个 BigDecimals
与 +
相加。