在RXjava中应用重试

时间:2016-01-12 09:41:18

标签: java java-8 rx-java

我想运行一个使用RXJava重试的方法

return Observable
        .just(myObj)
        .flatMap(doc ->
                myFunc(myObj, ....)
        )
        .doOnError(e -> log.Error())
        .onErrorResumeNext(myObj2 ->
                methodIWantToRunWithRetries(...)
                        .onErrorResumeNext(myObj3 ->
                                methodIWantToRunWithRetries(...)
                        )

        );
}

如果我使用onErrorResumeNext,我需要多次嵌套我想要重试 (除非我想用try / catch包围它)

是否可以选择使用RXJava方法实现它?

1 个答案:

答案 0 :(得分:7)

RxJava提供标准重试运算符,允许您重试多次,如果异常与谓词匹配或具有一些复杂的重试逻辑,则重试。前两个使用最简单:

source.retry(5).subscribe(...)

source.retry(e -> e instanceof IOException).subscribe(...);

后者需要组装一个二级观察者,现在可以附加延迟,计数器等:

source.retryWhen(o -> o.delay(100, TimeUnit.MILLISECONDS)).subscribe(...)