Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 链接多个发布者以转换响应_Spring_Kotlin_Spring Webflux_Project Reactor_Chaining - Fatal编程技术网

Spring 链接多个发布者以转换响应

Spring 链接多个发布者以转换响应,spring,kotlin,spring-webflux,project-reactor,chaining,Spring,Kotlin,Spring Webflux,Project Reactor,Chaining,我想在每个通量事件之后链接一个mono。mono发布者需要flux发布的每个事件的信息。响应应为带有通量事件和单响应数据的通量 挖掘之后,我在平面图中找到了一张地图。代码如下所示: override fun searchPets(petSearch: PetSearch): Flux<Pet> { return petRepository .searchPets(petSearch) // returns Flux<pet> .fl

我想在每个通量事件之后链接一个mono。mono发布者需要flux发布的每个事件的信息。响应应为带有通量事件和单响应数据的通量

挖掘之后,我在平面图中找到了一张地图。代码如下所示:

override fun searchPets(petSearch: PetSearch): Flux<Pet> {
    return petRepository
        .searchPets(petSearch) // returns Flux<pet>
        .flatMap { pet -> 
            petService
            .getCollarForMyPet() // returns Mono<collar>
            .map { collar -> PetConverter.addCollarToPet(pet, collar) } //returns pet (now with with collar)
        }
}
覆盖有趣的搜索宠物(petSearch:petSearch):流量{
返回石化存储库
.searchPets(petSearch)//返回通量
.flatMap{pet->
宠物服务
.getCollarForMyPet()//返回Mono
.map{collar->PetConverter.addCollarToPet(宠物,项圈)}//返回宠物(现在带项圈)
}
}
我主要关注的是:

  • 代码气味是否在平面图中使用贴图
  • pet可变内容是否会在多流量事件以及单流量事件发生时受到比赛条件的影响
  • 有没有更好的方法来处理这种行为

    • 这种方法非常好

      反应流规范要求
      onNext
      事件不重叠,因此竞争条件不会出现问题

      flatMap
      引入了并发性,因此对
      PetService
      的多个调用将并行运行。这应该不是问题,除非
      searchPets
      两次发出
      Pet
      的实例

      但由于这种并发性,
      flatMap
      在这种情况下可以对宠物进行重新排序。假设搜索返回
      petA
      ,然后返回
      petB
      ,但是
      petService
      调用
      petA
      需要更长的时间。在平面图的输出中,
      petB
      将首先发射(设置其项圈),然后发射
      petA