Код: Выделить всё
.onFailure()
.retry()
.withBackOff(200)
.withJitter(200)
.atMost(5)
.onFailure()
.recoverWithUni(throwable -> Uni.createFrom().item("failed"));
Код: Выделить всё
@Retry(maxRetries = 5, delay = 200, jitter = 200)
@Fallback(fallbackMethod = "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
Я пытался создать простое приложение Quarkus с SmallRye Fault Tolerance с application.properties, и оно прекрасно работало с @Retry при выполнении вызовов API:
Код: Выделить всё
quarkus.http.port=8081
Retry/maxRetries=8
Retry/delay=2
Retry/delayUnit=SECONDS
Код: Выделить всё
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";
}
}
Код: Выделить всё
quarkus:
http:
port: 8081
Retry:
maxRetries: 5
delay: 2
delayUnit: SECONDS
Я также попробовал следующее:
Код: Выделить всё
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
Подробнее здесь: https://stackoverflow.com/questions/791 ... -runtime-i