微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

处理命令式弹簧应用中的弹簧反应器异常

如何解决处理命令式弹簧应用中的弹簧反应器异常

我在命令式弹簧启动应用程序中使用了webflux。在此应用程序中,我需要使用webclient进行各种后端的REST调用,并等待所有响应,然后再继续下一步。

ClassA

public ClassA
{
     public Mono<String> restCall1()
     {
          return webclient....exchange()...
                 .retrywhen(Retry.backoff(maxAttempts,Duration.ofSeconds(minBackOff))
                 .filter(this::isTransient)
                 .onRetryExhaustedThrow((retryBackoffSpec,retrySignal) -> {
                     return new MyCustomException();
        });
     }
}

ClassB

public ClassB
{
     public Mono<String> restCall2()
     {
          return webclient....exchange()...
                 .retrywhen(Retry.backoff(maxAttempts,retrySignal) -> {
                     return new MyCustomException();
        });
     }
}
Mono<String> a = classAObj.restCall1();
Mono<String> b = classBObj.restCall2();

ArrayList<Mono<String>> myMonos = new ArrayList<>;

myMonos.add(a);
myMonos.add(b);

try {
List<String> results = Flux.mergeSequential(myMonos).collectList().block();} 
catch(WebclientResponseException e) {
.... 
}

上面的代码按预期工作。将Webclient配置为在5xx和4xx上引发错误,我可以使用WebclientResponseException捕获该错误

问题是我无法从react框架中捕获任何异常。例如,我的Web客户端配置为以指数退避重试,并在耗尽时抛出异常,而我无法在上面的try catch块中捕获它。我探索了使用onErrorReturn处理webclient流中的exceptiom的选项,但它不会将错误传播回我的订户。

我也无法将异常添加到catch块中,因为代码的任何部分都不会抛出该异常。

任何人都可以建议什么是处理此类错误的最佳方法。场景。我是webflux和反应式编程的新手。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。