【问题标题】:How to combine two async webclient call, assume if one call encountered some exception如何组合两个异步 Web 客户端调用,假设一个调用遇到异常
【发布时间】:2019-06-02 19:54:33
【问题描述】:

我正在使用 spring boot 2.x 并使用 webclient 进行两个异步调用,我在一个调用中得到了正确的响应,而另一个调用遇到了一些异常。 我想使用 zip 方法将两个响应压缩在一起,但是在使用带有 zip 的块时,它会引发异常并控制流来捕获块。我希望两个响应都与一个或两个中的异常一起压缩。请指导我如何做到这一点。

Mono<BookResponse>  bookResponseMono =webClient.get()
           .uri("/getBooking/" + bookingId).headers(headers->headers.addAll(args) 
           .retrieve()
           .bodyToMono(BookResponse.class);// with proper responce
Mono<Address>  addressResponseMono =webClient.get()
           .uri("/getAddress/" + bookingId)
           .headers(headers->headers.addAll(args))
           .retrieve()
           .bodyToMono(Address.class);// encounter readtimeout exception

Tuple2<BookResponse, Address> resp = bookResponseMono.zipWith(addressResponseMono).block();// throws exception but 

我想压缩两个响应以及异常。

【问题讨论】:

  • 看来你有两个选择 1) 不要使用 try/catch 2) 在 always 中执行 zip
  • 另一种方法是为addressResponseMono 提供错误处理程序(onErrorReturndoOnError 等)。
  • 感谢 Randy 和 Adhika 的快速响应,onErrorResume 为我工作。

标签: java spring-boot spring-webflux


【解决方案1】:

onErrorResume 为我解决了上述问题。

bookResponseMono = webClient.get()
    .uri("/getBooking/" + bookingId)
    .headers(headers->headers.addAll(args))
    .retrieve()
    .bodyToMono(String.class)
    .onErrorResume(err -> {
        BookResponse bookResponse = new BookResponse();
        bookResponse.setError(setError(err));
        return Mono.just(setError(err));
    });

addressResponseMono = webClient.get()
    .uri("/getAddress/" + bookingId)
    .headers(headers -> headers.addAll(args))
    .retrieve()
    .bodyToMono(String.class)
    .onErrorResume(err -> {
        Address address = new Address();
        address.setError(setError(err));
        return Mono.just(setError(err));
    });

终于解压

bookAndAddressResponse = bookResponseMono
    .zipWith(addressResponseMono, BookAndAddressResponse::new)
    .block();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2010-11-16
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多