【问题标题】:Creating a Feign configuration just for one client?仅为一个客户端创建 Feign 配置?
【发布时间】:2022-01-24 22:50:50
【问题描述】:

我有一大堆使用共享配置的 Feign 客户端 (MyFeignConfiguration.class):

@FeignClient(name = "clientA", url = "http://serviceA.com", fallbackFactory = ServiceAFallbackFactory.class, configuration = MyFeignConfiguration.class)

@FeignClient(name = "clientB", url = "http://serviceB.com", fallbackFactory = ServiceBFallbackFactory.class, configuration = MyFeignConfiguration.class)

@FeignClient(name = "clientC", url = "http://serviceC.com", fallbackFactory = ServiceCFallbackFactory.class, configuration = MyFeignConfiguration.class)

但是,对于一个新客户端,我想将用于 OkHttp 的底层 Http Client 更改为。在MyFeignConfiguration 类中,我可以添加以下内容:

@Configuration
class MyFeignConfiguration {
    @Bean
    public Client getClient() {
        return OkHttpClient() // use the OkHttp client 
    }
   
    @Bean
    public ErrorDecoder getErrorDecoder() {
        //... existing configs
    }

但是,现在所有的客户端都在使用这个 OkHttp 客户端。如何配置新的 feign 客户端,使其仅使用 OkHttp 客户端?此外,我仍然需要使用我的主要 MyFeignConfiguration 类中现有的默认配置(如 ErrorDecoder)。

【问题讨论】:

    标签: java spring rest spring-cloud feign


    【解决方案1】:

    查看文档有一个导入的注释https://cloud.spring.io/spring-cloud-openfeign/reference/html/#spring-cloud-feign-overriding-defaults

    FooConfiguration 不需要用@Configuration 注释。但是,如果是,请注意将其从任何可能包含此配置的 @ComponentScan 中排除,因为在指定时它将成为 feign.Decoder、feign.Encoder、feign.Contract 等的默认源。这可以通过将其与任何@ComponentScan 或@SpringBootApplication 放在一个单独的、不重叠的包中来避免,或者可以在@ComponentScan 中明确排除它。

    尝试删除注释:@Configuration

    【讨论】:

      【解决方案2】:

      您必须为新的 Feign 客户端创建新的 FeignConfiguration 类, 此外,您应该从 Feign 配置类中删除 @Configuration。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-27
        • 2020-10-21
        • 2023-03-25
        • 2019-11-04
        • 1970-01-01
        • 2020-08-04
        • 2020-01-02
        • 2020-12-20
        相关资源
        最近更新 更多