Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
如何使用SpringWebClient连续拨打多个电话?_Spring_Webflux - Fatal编程技术网

如何使用SpringWebClient连续拨打多个电话?

如何使用SpringWebClient连续拨打多个电话?,spring,webflux,Spring,Webflux,我读了这个话题 ,但我的情况有点不同。我使用webclient调用了两个不同的外部服务,比如从MonoA()方法调用,然后是MonoB()。我的目标是从A()中提取数据,然后将其传递给B()。是否有正确的方法避免: 异步调用(导致非法的arg异常,因为B在A()完成之前请求arg) 阻塞呼叫,导致系统处于被动状态 是否有一种标准的方法来实现它?第一种情况: Mono a=getFromAByWebClient() 您希望通过post或put请求将此数据发送到呼叫服务B 在这里,由于mono是

我读了这个话题 ,但我的情况有点不同。我使用webclient调用了两个不同的外部服务,比如从MonoA()方法调用,然后是MonoB()。我的目标是从A()中提取数据,然后将其传递给B()。是否有正确的方法避免:

  • 异步调用(导致非法的arg异常,因为B在A()完成之前请求arg)
  • 阻塞呼叫,导致系统处于被动状态
是否有一种标准的方法来实现它?

第一种情况:

Mono a=getFromAByWebClient()

您希望通过post或put请求将此数据发送到呼叫服务B

在这里,由于mono是一个对象,您希望通过api以post或方法发送它,因此必须随身携带该数据,因此您应该等到数据不是来自第一个服务,否则它将使用空白数据命中api或导致异常

第二种情况:

既然B依赖于A,为什么不在B服务中调用服务并获取数据呢


因为在Spring中,一切都是流式的,所以可以使用一个数据进行操作,直到其他数据都在进行中,但是要执行的操作应该有数据。

好吧,有人告诉我如何重构代码。问题已经解决,为了便于记忆,以下是解决方法:

  • 原始代码返回

    Mono.fromRunnable(()->apply(param param));
    
  • 方法“应用”在调用外部资源时订阅:

      apply(param param) {
      service.callRemote(val x).subscribe();
    
      <---some bl --->
    
      };
    

    apply()已被删除,远程调用包装到flatMap()中并集成到管道中。现在它按预期工作,依次调用远程资源。

    我的情况似乎更简单了。我有两个SpringBean(可以转换成一个,这不是问题),所以,实际上,我正在寻找Mono.zip()解决方案或其他什么。不幸的是,我在努力学习被动的概念。好的,谢谢你的支持,我会尝试分享结果。如果你想加入两个mono的输出,你可以使用mono.mergeWith()方法,或者在Flux中合并它
         Mono.just.flatMap(service.callRemote(val x)).then();