반응형
- retrieve vs exchange(exchangeToMono)
retrieve: http status code가 200일 경우 response body처리
http status code가 다른 경우(400, 500, etc.) WebClientResponseException 떨어짐
에러 처리 커스텀하게 하고 싶으면 onStatus 사용
exchange: any response에서도 사용 가능하나 꼭 response 내용을 사용해야 함(성공이건 실패건 상관없이) 아니면 memory leak이 있을 수 있다고..
응답이 200이고 응답 body에 대한 처리만 하고 싶은 경우 retrieve.
이 외에 응답 코드가 4xx, 5xx 등 특정 코드에 따라 다른 결과를 주고 싶거나 응답 헤더를 사용하고 싶은 경우는 exchange를 사용
- 에러 처리할 때 doOnNext vs flatMap?
둘 다 작동하긴 하지만 함수의 사상 상 doOnNext가 더 적합한 것 같다. 둘 다 두면 위에서 걸려서 아래로 안 흐른다.
public Mono<BaseResponse<String>> getPopo(){
System.out.println(">> popo " + Thread.currentThread().getName());
return webClient.get()
.uri(uriBuilder -> uriBuilder.path("/api/hello/popo").build())
.retrieve()
.onStatus(HttpStatus::isError, resp -> Mono.error(new Exception()))
.subscribeOn(Schedulers.boundedElastic())
.bodyToMono(new ParameterizedTypeReference<BaseResponse<String>>(){})
// .doOnNext(res -> {
// if(res.getHeader().getStatus() == 200){
// throw new Exception("error");
// }
// })
.flatMap(res -> {
if(res.getHeader().getStatus() == 300){
return Mono.error(new Exception("검증실패"));
//return Mono.empty();
}else{
System.out.println(">> popo2 " + Thread.currentThread().getName());
return Mono.just(res);
}
})
.delayElement(Duration.ofSeconds(10))
;
}
참고: https://binux.tistory.com/56
728x90
반응형
'개발 > reactive' 카테고리의 다른 글
[reactor] Sinks (0) | 2022.06.13 |
---|---|
[webflux] block vs toFuture (0) | 2022.03.31 |
[webflux] 실무투입고민 (0) | 2022.03.30 |
[spring] spring-web and spring-webflux (0) | 2022.03.25 |
[reactive] 10. Flux (0) | 2022.03.25 |