【发布时间】:2021-10-13 08:13:04
【问题描述】:
我有一个方法 createComplianceResponse() 返回 BOLCompliance 对象,在此之前我更改为 BOLCompliance 的 Mono,因为我必须在其中调用另一个反应式服务。 但是在这样做之后,我正在调用该服务的当前服务在第 6 行和第 7 行出现错误。
1) Cannot convert from Mono<Object> to Mono<List<BOLCompliance>>
2) Cannot convert from List<Mono<BOLCompliance>> to List<BOLCompliance>
private Mono<List<BOLCompliance>> getComplienceRouteLink(BOLRouteLink routeLink, BillOfLadingResponse bol) {
if (null != routeLink.getComplianceIds() && !routeLink.getComplianceIds().isEmpty()) {
Mono<List<Compliance>> complianceList = Flux
.fromIterable(routeLink.getComplianceIds()).flatMap(cmp ->
complianceCaller.getComplianceById(cmp)).collectList();
return complianceList.flatMap(compliancesOld -> {
List<BOLCompliance> complianceResponses = compliancesOld.parallelStream()
.map(compliance -> createComplianceResponse(compliance,bol)
).collect(Collectors.toList());
return Mono.just(complianceResponses);
});
}
我更改了返回类型的其他服务是
private Mono<BOLCompliance> createComplianceResponse(Compliance compliance, BillOfLadingResponse bol);
【问题讨论】:
-
你把事情搞混了,我会说。您在那里有一个 parellelStream,暗示您要并行化 createComplianceResponse。我认为您应该尝试生成 Flux
而不是 Mono - >,省略 parallelStream,并仅映射到 createComplianceResponse()。这应该会产生 Flux
,并且也是可并行化的。
标签: reactive-programming spring-webflux project-reactor