Как настроить значения аннотаций SmallRye Fault Tolerance во время выполнения в файле application.yml, например maxRetriJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить значения аннотаций SmallRye Fault Tolerance во время выполнения в файле application.yml, например maxRetri

Сообщение Anonymous »

Я использую аннотацию Quarkus SmallRye Fault Tolerance, например @Retry, в своем приложении Quarkus. У меня есть много методов с логикой Retry, для которых я хочу использовать SmallRye Fault Tolerance, поэтому я изменил старый код с:

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

.onFailure()
.retry()
.withBackOff(200)
.withJitter(200)
.atMost(5)
.onFailure()
.recoverWithUni(throwable -> Uni.createFrom().item("failed"));
К этому новому коду с @Retry (этот метод является общедоступным методом с классом, аннотированным @ApplicationScoped):

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

@Retry(maxRetries = 5, delay = 200, jitter = 200)
@Fallback(fallbackMethod = "handleFailure")
Приведенные выше аннотации отлично работают при сбое и могут выполняться 5+1 шесть раз во время сбоя и, наконец, возвращать значение по умолчанию onFailure из метода handleFailure.
Поскольку в моем приложении много методов и классов, я не хочу определять значения для maxRetries, задержки, джиттера для каждого из них, а хочу определить их в application.yml файл свойств.
В будущем, если я захочу изменить какую-либо информацию, я смогу изменить ее из файла свойств, а в методах просто определите аннотацию @Retry, чтобы остальная информация будет получена во время выполнения из файла свойств application.yml.
Основываясь на документации, я попробовал следующее:
Файл application.yml:

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

Retry/maxRetries=5
Retry/delay=200
Retry/jitter=200
Но мне кажется, это вообще не работает. По какой-то причине используются значения по умолчанию, а не те, которые я указал в своей конфигурации.
Можно ли настроить значения для SmallRye Fault Tolerance в файле application.yml< /код> файл? Ни в документации, ни на GitHub я не нашел конкретного примера. Может ли кто-нибудь помочь мне с этой проблемой? Как правильно определить конфигурацию времени выполнения для SmallRye Fault Tolerance? Предоставьте полное дерево YML, чтобы я мог видеть, к какому родительскому элементу должны относиться эти значения.

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

quarkus:
# ... other existing configurations ...

smallrye-fault-tolerance:
retry:
max-retries: 5
Обновление от 25 октября на основе комментария @Ladicek :
Я пытался создать простое приложение Quarkus с SmallRye Fault Tolerance с application.properties, и оно прекрасно работало с @Retry при выполнении вызовов API:

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

quarkus.http.port=8081
Retry/maxRetries=8
Retry/delay=2
Retry/delayUnit=SECONDS
Ниже приведен мой CakeResource.java:

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

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import org.eclipse.microprofile.faulttolerance.Fallback;
import org.eclipse.microprofile.faulttolerance.Retry;
import org.jboss.logging.Logger;

import java.util.Random;

@Path("/api/bake")
@ApplicationScoped
public class CakeResource {
private static final Logger logger = Logger.getLogger(CakeResource.class);
private final Random r = new Random();

@GET
@Produces(MediaType.TEXT_PLAIN)
@Retry()
@Fallback(fallbackMethod = "defaultFallback")
public String bakeCake() throws Exception {
logger.info("****** Newly Backing Cake ********");
final Double randDouble = r.nextDouble();
logger.info(randDouble);

if (randDouble < 0.5) {
logger.info(" No items left sorry .... ");
throw new Exception();
}

if (randDouble < 0.999) {
logger.info(" oops Cake burned... ");
throw new Exception();
}

logger.info(" Cake prepared ");

return "Here is your take, Guten Appetit\n";
}

public String defaultFallback() {
return "Sorry unable prepare the cake today \n";
}
}
Теперь для того же самого CakeResource я использовал application.yml вместо application.properties. Я добавил quarkus-config-yaml в файл pom.xml и изменил application.yml на это:

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

quarkus:
http:
port: 8081

Retry:
maxRetries: 5
delay: 2
delayUnit: SECONDS
Конфигурация @Retry в application.yml была проигнорирована, по умолчанию установлено значение maxRetries: 3 и задержка: 0. Другие настройки, такие как порт, были применены, поэтому файл application.yml был распознан, но не для конфигураций SmallRye Fault Tolerance.
Я также попробовал следующее:

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

Approach-1 :
quarkus:
http:
port: 8082

smallrye-fault-tolerance:
retry:
max-retries: 5
delay: PT2S

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

Approach-2 :
quarkus:
http:
port: 8083

mp:
fault-tolerance:
retry:
max-retries: 3
delay: 500
jitter: 100

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

Approach-3 :
quarkus:
http:
port: 8081

smallrye-fault-tolerance:
retry:
max-retries: 5
delay: PT2S
jitter: PT0.2S

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

Approach-4:
quarkus:
http:
port: 8081

mp:
fault-tolerance:
retry:
max-retries: 5
delay: PT2S
jitter: PT0.2S

smallrye-fault-tolerance:
retry:
max-retries: 5
delay: PT2S
jitter: PT0.2S
Ни одна конфигурация в application.yml мне не помогла. Я не уверен, проблема ли это в настройке или SmallRye Fault Tolerance не считывает свойства из application.yml. Можете ли вы подтвердить, как использовать конфигурации среды выполнения с SmallRye Fault Tolerance через application.yml?

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

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

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

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

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

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

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