如何组合两个异步 webclient 调用,假设一个调用遇到异常
How to combine two async webclient call, assume if one call encountered some exception
我正在使用 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
我想压缩两个响应以及异常。
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();
我正在使用 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
我想压缩两个响应以及异常。
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();