RxJava:使用 retryWhen() 重试订阅者
RxJava : Retrying a subscriber using retryWhen()
我正在使用 Vertx RxJava 订阅者使用 REST api。我想在出现特定错误时重试请求,下面是我的代码。
当我 运行 这样做时,重试一直在无限发生,我宁愿让它重试三次。
我是 RxJava 的新手,仍然掌握着以 Rx 方式做事的诀窍。
有人可以告诉我是否遗漏了什么吗?谢谢!
responseSingle.map(response -> {
//do some stuff
return responseBody;
}).retryWhen(errors -> {
errors.flatMap(error -> {
log.info("==================== caught error ==================== ");
// For IOExceptions, we retry
if (error instanceof MySpecificException) {
log.info("==================== retrying request ==================== ");
return Observable.just(null);
}
// For anything else, don't retry
return errors;
});
return errors;
}
).onErrorReturn(t -> {
//do some stuff
return responseBody;
});
只需添加 .retry(count)
,未经测试但应该可以。
responseSingle.map(response -> {
//do some stuff
return responseBody;
})
.retry(3) // count of retries
.retryWhen(errors -> {
errors.flatMap(error -> {
log.info("==================== caught error ==================== ");
// For IOExceptions, we retry
if (error instanceof MySpecificException) {
log.info("==================== retrying request ==================== ");
return Observable.just(null);
}
// For anything else, don't retry
return errors;
});
return errors;
}
).onErrorReturn(t -> {
//do some stuff
return responseBody;
});
您不必使用 retryWhen
,retry
就足够了。
responseSingle.map(response -> {
//do some stuff
return responseBody;
})
.retry((attempts,error) -> attempts<3 && error instanceof MySpecificException)
.onErrorReturn(t -> {
//do some stuff
return responseBody;
});
里面的表达式重试会重试returnstrue
我正在使用 Vertx RxJava 订阅者使用 REST api。我想在出现特定错误时重试请求,下面是我的代码。 当我 运行 这样做时,重试一直在无限发生,我宁愿让它重试三次。
我是 RxJava 的新手,仍然掌握着以 Rx 方式做事的诀窍。 有人可以告诉我是否遗漏了什么吗?谢谢!
responseSingle.map(response -> {
//do some stuff
return responseBody;
}).retryWhen(errors -> {
errors.flatMap(error -> {
log.info("==================== caught error ==================== ");
// For IOExceptions, we retry
if (error instanceof MySpecificException) {
log.info("==================== retrying request ==================== ");
return Observable.just(null);
}
// For anything else, don't retry
return errors;
});
return errors;
}
).onErrorReturn(t -> {
//do some stuff
return responseBody;
});
只需添加 .retry(count)
,未经测试但应该可以。
responseSingle.map(response -> {
//do some stuff
return responseBody;
})
.retry(3) // count of retries
.retryWhen(errors -> {
errors.flatMap(error -> {
log.info("==================== caught error ==================== ");
// For IOExceptions, we retry
if (error instanceof MySpecificException) {
log.info("==================== retrying request ==================== ");
return Observable.just(null);
}
// For anything else, don't retry
return errors;
});
return errors;
}
).onErrorReturn(t -> {
//do some stuff
return responseBody;
});
您不必使用 retryWhen
,retry
就足够了。
responseSingle.map(response -> {
//do some stuff
return responseBody;
})
.retry((attempts,error) -> attempts<3 && error instanceof MySpecificException)
.onErrorReturn(t -> {
//do some stuff
return responseBody;
});
里面的表达式重试会重试returnstrue