Код: Выделить всё
public Uni countChecker(final String id, final int expectedCount) {
return Uni.createFrom().deferred(Unchecked.supplier(
() -> {
try {
return queryRepository.getCount(id);
} catch (IOException e) {
throw new RuntimeException("Something went wrong getting data!!!");
}
}))
.onItem()
.transformToUni(
actualCount -> {
if (actualCount < expectedCount) {
return Uni.createFrom().failure(new RuntimeException("Actual count is less than expected."));
}
return Uni.createFrom().item(count);
})
.onFailure()
.retry()
.atMost(4)
.onFailure()
.recoverWithUni(throwable -> Uni.createFrom().item(0L));
}
Вместо использования логики повтора внутри метода я хочу использовать аннотации SmallRye Fault Tolerance, такие как @Retry, поэтому я изменил свой код и добавил @Retry вот так:
Код: Выделить всё
@Retry(maxRetries = 4, retryOn = {RuntimeException.class, IOException.class})
@Fallback(fallbackMethod = "countCheckerFallback")
public Uni countChecker(final String id, final int expectedCount) {
return Uni.createFrom().deferred(Unchecked.supplier(
() -> {
try {
return queryRepository.getCount(id);
} catch (IOException e) {
throw new RuntimeException("Something went wrong getting data!!!");
}
}))
.onItem()
.transformToUni(
count -> {
if (count < expectedCount) {
return Uni.createFrom().failure(new RuntimeException("Actual count is less than expected."));
}
return Uni.createFrom().item(count);
});
}
public Uni countCheckerFallback(final String id, final int expectedCount) {
log.info(" FALL BACK METHOD ");
return Uni.createFrom().item(0L);
}
При @Retry этого не происходит, и выполнение происходит только один раз, и во время сбоя @Retry не срабатывает.
На основе SmallRye Fault Документация по допускам. Я пробовал следующее:
- Класс помечен @ApplicationScoped.
< li>Метод является общедоступным. - Метод с аннотацией @Retry.
Кто-нибудь может помочь, как я могу использовать аннотацию SmallRye Fault Tolerance @Retry с Smallrye Mutiny Uni ? Какие изменения мне нужно внести, чтобы это работало и выполнялась ли повторная попытка в случае сбоя?
Подробнее здесь: https://stackoverflow.com/questions/791 ... rye-mutiny