为了账号安全,请及时绑定邮箱和手机立即绑定

如何组合两个异步 webclient 调用,假设一个调用遇到异常

如何组合两个异步 webclient 调用,假设一个调用遇到异常

千万里不及你 2022-12-28 16:22:21
我正在使用 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 responceMono<Address>  addressResponseMono =webClient.get()           .uri("/getAddress/" + bookingId)           .headers(headers->headers.addAll(args))           .retrieve()           .bodyToMono(Address.class);// encounter readtimeout exceptionTuple2<BookResponse, Address> resp = bookResponseMono.zipWith(addressResponseMono).block();// throws exception but 我想压缩两个响应以及异常。
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

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();


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信