空 Feign 配置未扩展

dco*_*zin 7 java spring-boot spring-cloud-feign

我有几个 Feign 客户端,具有不同的配置。常见的配置如下所示

public class FeignLogConfig {
    @Bean
    public LogOkHttpInterceptor LogOkHttpInterceptor() { //custom interceptor
        return new LogOkHttpInterceptor(); 
    }

    @Bean
    public feign.okhttp.OkHttpClient okHttpClient(LogOkHttpInterceptor interceptor) {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.addInterceptor(interceptor);
        return new feign.okhttp.OkHttpClient(builder.build());
    }
}
Run Code Online (Sandbox Code Playgroud)

可以进一步扩展

public class FeignRetryerConfig extends FeignLogConfig {
    @Bean
    public Retryer retryer() {
        return new Retryer.Default(100, 500, 5);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者简单地

public class FeignEmptyConfig extends FeignLogConfig {}
Run Code Online (Sandbox Code Playgroud)

客户端注释为

@FeignClient(value = "retryClient", url = url, configuration = FeignRetryerConfig.class)
Run Code Online (Sandbox Code Playgroud)

或者

@FeignClient(value = "logClient", url = url, configuration = FeignLogConfig.class)
Run Code Online (Sandbox Code Playgroud)

实际上会使用定义的拦截器,但是

@FeignClient(value = "emptyClient", url = url, configuration = FeignEmptyConfig.class)
Run Code Online (Sandbox Code Playgroud)

不会使用LogOkHttpInterceptor. 我在文档中找不到解释,所以我不知道我是否真的遗漏了一些东西。

可以在这里找到一个最小的例子。

编辑:对我来说,目前似乎与 Feign 无关,而是与 Spring 如何聚合配置有关。虽然上面的方法FeignEmptyConfig不起作用,但下面的方法却有效!

@Import(CommonFeignConfig.class)
public class EmptyFeignConfig {}
Run Code Online (Sandbox Code Playgroud)