我正在处理一个应该调用下游服务的服务,根据下游服务的响应,我的下一个递归将被调用。
这里是示例代码供参考
private fun rec(storeId: Int, listOfMonos: ArrayList<Mono<*>>, visited: HashSet<CartesianCoordinate>, previousCartesianCoordinate: CartesianCoordinate?, destinations: List<PathingCartesianPosition>) {
if(visited.size == destinations.size)
return
val currentCoordinate = findClosestCoordinate(destinations, previousCartesianCoordinate, visited)
var startingCoordinate = previousCartesianCoordinate
currentCoordinate.first?.let { visited.add(it) }
val queryString = ObjectMapper().writeValueAsString(currentCoordinate.first?.let {
previousCartesianCoordinate?.let { it1 ->
PathServiceQuery(
it1,
it
)
}
})
listOfMonos.add(webClient.getPath(storeId, queryString, currentCoordinate.second))
listOfMonos.last {
println("YY")
it.flatMap { x ->
println("ZZ")
if(!(x as PathingCartesianResponse).coordinates.isNullOrEmpty()) {
println("XX")
currentCoordinate.first?.let { it1 -> startingCoordinate = it1 }
}
Mono.just(x)
}
true
}
rec(storeId, listOfMonos, visited, startingCoordinate, destinations)
}
下游服务通过
webClient
调用,它返回一个 Mono
。
我只需要检查它是否返回空响应。
这只能通过阻塞来实现吗?
正如您在此处看到的,仅打印了
YY
,而不是 XX
或 ZZ
。不阻塞就可以做到吗?