如何在application.yml中配置Quarkus SmallRye Fault Tolerance运行时参数
Quarkus SmallRye Fault Tolerance YAML全局配置不生效问题
我在Quarkus应用中使用SmallRye Fault Tolerance的@Retry等注解替换了原有链式调用代码(方法为public,所在类标注@ApplicationScoped),注解本身可正常工作。但由于应用内方法和类数量较多,希望在application.yml中统一配置maxRetries、delay、jitter等参数,而非在每个注解上单独定义。
测试发现使用application.properties时配置可正常生效,但改用application.yml(已添加quarkus-config-yaml依赖)后,@Retry的配置被忽略,仍使用默认值,其他配置(如端口)可正常生效。尝试多种yml配置结构均无效,请求确认如何通过application.yml正确配置SmallRye Fault Tolerance的运行时参数。
原有链式调用代码
.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")
测试用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"; } }
尝试过的YAML配置方式
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
内容的提问来源于stack exchange,提问作者BATMAN_2008
相关产品推荐
相关产品推荐

