Как использовать аннотацию SmallRye Fault Tolerance @Ready с Smallrye Mutiny?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать аннотацию SmallRye Fault Tolerance @Ready с Smallrye Mutiny?

Сообщение Anonymous »

В настоящее время в моем классе есть следующий метод, помеченный как @ApplicationScoped:

Код: Выделить всё

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));
}
Приведенный выше код отлично работает во время сбоя, и если что-то пойдет не так и произойдет сбой, он автоматически попытается выполнить до 4+1 раз.
Вместо использования логики повтора внутри метода я хочу использовать аннотации 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 во время отладки, я мог видеть, что выполнение возвращает queryRepository.getCount(id); несколько раз во время сбоя.
При @Retry этого не происходит, и выполнение происходит только один раз, и во время сбоя @Retry не срабатывает.
На основе SmallRye Fault Документация по допускам. Я пробовал следующее:
  • Класс помечен @ApplicationScoped.
    < li>Метод является общедоступным.
  • Метод с аннотацией @Retry.
Я видел этот ответ на Stackoverflow, где упоминалось, что это невозможно. Поэтому я хотел подтвердить, возможно это или нет.
Кто-нибудь может помочь, как я могу использовать аннотацию SmallRye Fault Tolerance @Retry с Smallrye Mutiny Uni ? Какие изменения мне нужно внести, чтобы это работало и выполнялась ли повторная попытка в случае сбоя?

Подробнее здесь: https://stackoverflow.com/questions/791 ... rye-mutiny
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»