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

升级HttpExecutor至v2后测试出现重复指标异常求助

解决HttpExecutor v2升级后OkHttp重复指标注入错误

升级HttpExecutor到v2版本后运行测试用例时,出现Guice注入异常,核心问题是OkHttp的指标okhttp3.OkHttpClient.connection-pool-total-count被重复注册,报错信息如下:

Caused by: java.lang.IllegalArgumentException: A metric named okhttp3.OkHttpClient.connection-pool-total-count already exists
[ERROR] com.main.testSuccessMetadataStore  Time elapsed: 0.088 s  <<< ERROR!
com.google.inject.ProvisionException: 
Unable to provision, see the following errors:
1) [Guice/ErrorInjectingConstructor]: IllegalArgumentException: A metric named okhttp3.OkHttpClient.connection-pool-total-count already exists

解决方案

  • 检查OkHttpClient实例复用情况
    HttpExecutor v2默认启用了Micrometer指标收集,若你的业务代码或测试代码中也手动配置了OkHttp的指标绑定,就会导致重复注册。确保整个环境(包括测试)中,同一指标域下只存在一个OkHttp指标注册逻辑。

  • 禁用HttpExecutor内置指标收集
    如果不需要HttpExecutor自带的OkHttp指标,可直接关闭:

    @Bean
    public HttpExecutor httpExecutor() {
        return HttpExecutor.builder()
                .disableMetrics() // 关闭内置指标收集
                .build();
    }
    
  • 统一MeterRegistry实例
    若需要保留指标,确保所有OkHttp相关组件共用同一个MeterRegistry单例。在Guice模块中绑定单例注册器:

    bind(MeterRegistry.class).toInstance(new SimpleMeterRegistry());
    

    同时让HttpExecutor依赖这个单例:

    HttpExecutor.builder()
            .meterRegistry(injector.getInstance(MeterRegistry.class))
            .build();
    
  • 测试用例隔离与清理
    测试环境中,使用@DirtiesContext(Spring)或Guice模块隔离,避免不同测试重复创建实例;或者在测试前置方法中清理指标:

    @BeforeEach
    void setUp() {
        MeterRegistry registry = getMeterRegistryInstance();
        registry.getMeters().forEach(registry::remove);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:11:13