首页 > 解决方案 > 使用 webclient 同时进行多个调用:当 webClient 抛出连接异常时,未调用 Flux .doOnTerminate

问题描述

我正在尝试使用 webclient 同时进行多个调用,并发现在发生连接错误(例如“未知主机异常”)的情况下,使用以下代码可以按预期工作。在这种情况下,onErrorContinue 被异常调用,但 .doOnTerminate 或 .doOnCancel 未被调用。否则,我们无法可靠地声明为“完成”。我尝试了多种选择,但没有任何帮助。不知道为什么当 webclient 抛出连接错误时没有触发结束信号

  Flux.fromIterable(Arrays.asList(users))
       .subscribeOn(Schedulers.elastic(), false)
       .flatMap(user -> {
           try {
               return makeRemoteCall(user) -> returns bodyToFlux
           } catch(Exception e) {
               System.out.println("webclient flatmap exception"); -> this stmt never hits
               return Flux.error(e);
           }
       })
       .onErrorContinue((throwable, o) -> {          
           LOG.info("{}, {}", throwable.toString(), o);          
       })        
       .doOnTerminate(() -> {
           System.out.println("finished");
       })
       .doOnCancel(() -> {
           System.out.println("finished with cancel signal");
       })
       .subscribe(content -> {
           System.out.println("content")
       });

标签: javaspring-webfluxproject-reactorreactorreactive-streams

解决方案


推荐阅读