Java Flux 异常处理?

问题描述 投票:0回答:1

有人可以指导我吗,因为我是新的变化并试图了解如何处理这种情况?

问题: 我在下面的

getResp()
方法的通量响应之一中收到 readTimeout 异常,然后所有先前的成功响应都将被忽略并返回异常错误。

相反,我想返回在异常之前收到的所有成功响应。

public Flux<CustomObject1> getInfo(List<RequestObj> requestObjList) {
return requestObjList.stream()
       .parallel()
       .map(this::getResp)
       .reduce(Flux::Merge)
       .orElse(Flux.empty());
}

public Flux<CustomObject1> getResp(RequestObj requestObj){
// process the request and return ...        

}

如果不清楚,请告诉我,很乐意提供更多详细信息。

java java-stream project-reactor flux
1个回答
2
投票

有多种处理错误的方法

flatMap

使用

flatMapDelayError
将延迟任何错误,直到处理完所有元素

public Flux<CustomObject1> getInfo(List<RequestObj> requestObjList) {
    return Flux.fromIterable(requestObjList)
            .flatMapDelayError(this::getResp, Queues.SMALL_BUFFER_SIZE, Queues.XS_BUFFER_SIZE)
            .onErrorResume(e -> {
                // log error
                return Mono.empty();
            });
}

处理每个元素的错误

public Flux<CustomObject1> getInfo(List<RequestObj> requestObjList) {
    return Flux.fromIterable(requestObjList)
            .flatMap(request -> 
                    getResp(request)
                            .onErrorResume(e -> {
                                // log error
                                return Mono.empty();
                            })
            );

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.