当前位置: 首页 > 知识库问答 >
问题:

SpringBoot:如何使用反应式编程调用API链?

丌官飞章
2023-03-14

我想在另一个Flux流中间调用Mono,向mono发送Flux参数。我正在使用SpringBoot的WebClient。

我试过这个:

WebClient client = WebClient.create();
    client.get().uri("http://localhost:8081/api/{param1}", param1)
        .retrieve()
        .bodyToFlux(String.class)
        .zipWith(
            client.get().uri("http://localhost:8082/api/{param2}", param2)
            .retrieve()
            .bodyToMono(String.class);
        )
        .map(tuple -> {
          return tuple.getT1() + tuple.getT2();
        })

但是,如何将第一个API调用的返回发送给param2?然后得到双方的回应?第一个API返回许多值,对于每个值,我需要调用第二个API。

谢谢

共有1个答案

常茂
2023-03-14

我就是这样做的:

WebClient client = WebClient.create();
client.get().uri("http://localhost:8081/api/{param1}", param1)
    .retrieve()
    .bodyToFlux(String.class)
    .flatMap(
        response1 -> 
            client.get().uri("http://localhost:8082/api/{param2}", response1)
                .retrieve()
                .bodyToMono(String.class)
                .map(response2 -> new Response(response1, response2))
     )
     , Response.class
     )
 类似资料:
  • 应用程序: 接收以下有效负载: 我需要按以下方式进行处理: > 使用转换后的数据向“卡通数据库”微服务发送HTTP POST请求。 我遇到的问题是: 我需要使用(|)和)的

  • 从我的角度来看,我认为可以有一种方法在代码中明确我的Rest API是反应性的,但可能是我不知道的。

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我有一个下面的对象列表,方法返回被动类型

  • 我正在努力实现以下目标: 我有两种方法——1。公共方法1 2。公共方法2 你能帮助: 问题是,只有在使用method1.subscribe()时,控件才会转到方法1。我无法返回值或抛出异常基于状态字段从方法1返回。 当method1.map()或method1.filter()时,控件甚至不会转到方法1 当方法1返回Mono.empty(),那么控件不会切换到If清空(方法2)

  • 我面临的问题是,有一个服务,我必须调用,这是一个传统的Spring启动应用程序,而不是反应性的! 下面是一个示例endpoint,它接近上述遗留系统的想法: 我知道我不能用这个来实现真正的反应性善,有没有一个快乐的非阻塞和阻塞的媒介我可以在这里实现? 谢谢