You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OidcClientRequestReactiveFilter的容错重试功能失效问题咨询

RestClient注解@Retry/@Timeout不生效的原因及说明

这是特性,不是Bug

你遇到的情况是Quarkus当前版本中RestClient与SmallRye Fault Tolerance整合的特性限制,核心原因在于:

  • 你的接口方法返回的是同步类型String,但搭配了基于Reactive栈的OidcClientRequestReactiveFilter。Quarkus会自动把同步方法包装成Reactive调用(底层用Uni),但SmallRye的容错注解(@Retry、@Timeout)没法在这种自动包装的同步方法上正确拦截生效。
  • 只有当RestClient方法直接返回Reactive类型(比如Uni<String>)时,这些注解才能和Reactive调用链正确整合,触发重试、超时逻辑,同时输出你配置的DEBUG日志。

解决办法

把接口方法的返回类型改成Uni<String>即可,示例代码:

@RegisterRestClient(configKey = "acs")
@RegisterProvider(OidcClientRequestReactiveFilter.class)
public interface Test {
    @GET
    @Timeout
    @Retry
    @Path("/some-cool_path")
    Uni<String> test();
}

为什么手动用Uni实现重试可行?

你手动通过Uni的重试API(比如uni.retry().atMost(3))能生效,是因为直接在Reactive调用链上操作,绕开了RestClient同步方法自动包装带来的注解拦截问题,自然能正常工作。

内容的提问来源于stack exchange,提问作者Irina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:05:23