Kotlin Webflux,基于反应出版商的流程在中间中断了
该方法假设从MongoDB获取对象,并基于它们对每个对象调用两次外部API,然后将结果保存回DB 不确定为什么整个流程在第五行中被中断(已调试标记为最后调用函数)。我试图确保所有调用的函数都是被动的。在这一点上,我不知道出了什么问题。对于反应式编程来说也是非常新的Kotlin Webflux,基于反应出版商的流程在中间中断了,kotlin,reactive-programming,spring-webflux,spring-webclient,Kotlin,Reactive Programming,Spring Webflux,Spring Webclient,该方法假设从MongoDB获取对象,并基于它们对每个对象调用两次外部API,然后将结果保存回DB 不确定为什么整个流程在第五行中被中断(已调试标记为最后调用函数)。我试图确保所有调用的函数都是被动的。在这一点上,我不知道出了什么问题。对于反应式编程来说也是非常新的 fun fillMissingThings() { reactiveThingsRepository.findAllBySomeCondition(EMPTY) .map { i
fun fillMissingThings() {
reactiveThingsRepository.findAllBySomeCondition(EMPTY)
.map { it.name.getName() }
.flatMap(this::fetchIdByName) <-- this method is called last
.flatMap(this::fetchThingById)
.flatMap { reactiveThingsRepository.save(it) }
.subscribe()
}
fun fetchIdByName(name: String): Flux<String> =
webClient.get()
.uri(someUrlBasedOnName)
.retrieve()
.bodyToFlux(Array<SearchIdDto>::class.java)
.onErrorResume { Flux.empty() }
.retry(3)
.flatMap { Flux.fromArray(it) }
.map { it.id!! }
fun fetchThingById(thingId: String): Flux<Thing> =
webClient.get()
.uri(someUrlBasedOnId)
.retrieve()
.bodyToFlux(ThingDto::class.java)
.onErrorResume { Flux.empty() }
.retry(3)
.map { it.toEntity().setDefaultValues() }
fun fillingmissingtings(){
reactiveThingsRepository.findAllBySomeCondition(空)
.map{it.name.getName()}
.flatMap(this::fetchIdByName)你所说的“中断”是什么意思?进程结束,但没有错误,也没有保存到数据库?正是这样。请参阅日志,通过webclient调用第一个请求,我得到了200个返回。但是没有发送第二个请求,也没有将任何内容保存到数据库“中断”是什么意思?进程结束,但没有错误,没有保存到db?正是这样。请参阅日志,通过webclient调用第一个请求,我返回了200。但是没有发送第二个请求,也没有将任何内容保存到db