java - 在 RXjava 中应用重试

标签 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 方法来实现它?

最佳答案

RxJava 提供了标准的重试运算符,可以让您重试多次,如果异常匹配谓词或有一些复杂的重试逻辑则重试。前两种用法最简单:

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

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

后者需要组装一个辅助可观察对象,现在可以附加延迟、计数器等:

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

关于java - 在 RXjava 中应用重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34740091/

相关文章:

java - 使用 .toArray 从 ArrayList[x]byte[] 转换为 byte[]?

rx-java - RxJava 的 onBackPressureDrop() 是否会丢弃项目?

java - 在 Java 中使用流初始化二维数组

android - 模拟改造可观察到的错误

Android retofit+rxjava如何用repeatwhen处理动态请求参数

java - 如何使用 JSP 列出服务器目录的内容?

java - sql查询放在哪里?代码风格。 java 。数据库连接

java - 如何在不使用 ImageJ 库的情况下在 java 中加载或打开 DICOM 图像文件?

java - Java 8 代码库可以编译并在 Java 6 VM 上运行吗?

java - 是否有解决方案可以通过方法引用使方法调用函数具有动态数量的参数?