我正在使用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;
});
答案 0 :(得分:2)
您不必使用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;
});
如果重试中的表达式返回true
答案 1 :(得分:0)
只需添加.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;
});