代码之家  ›  专栏  ›  技术社区  ›  gervais.b

如何用mono绘制通量平面图?

  •  0
  • gervais.b  · 技术社区  · 6 年前

    我正在建立一个调用两个rest资源的服务。第一个调用检索项列表,第二个调用获取列表中每个项的详细信息。

    Flux<Result> search(query) {
        return client.post().uri("/search")
           .body(BodyInserters.fromObject(query))
           .retrieve()
           .bodyToMono(SearchResults.class)
           .flatMapIterable(r -> r.getResults())
           .flatMap(this::detail);
    }
    
    Mono<Detail> detail(result) {
        return client.get().uri("/detail/{id}", result.id)
            .retrieve()
            .doOnNext(System.out::println))
            .bodyToMono(Detail.class);
    }
    

    我可以看到 GET /detail/{id} 请求已发送,但 doOnNext this::detail 在我的测试中从未调用块:

    StepVerifier.create(target.search(query))
        .assertNext(d -> {
            assertThat(d.getField()).isEqualTo("detailed");
        })
        .verifyComplete();
    

    测试失败的原因是:

    java.lang.assertonerror:expection“assertNext”失败(应为:onNext();实际为:onComplete())

    我有点困在这个阶段,反应堆文件使用 flatMap 对于这种情况,似乎发送了子请求(详细信息)。当我看着威莫克时,我看到他能够回复我,但是我什么也没有了。

    有人知道哪里出了问题吗?

    0 回复  |  直到 6 年前