如何在多个假装客户端之一中禁用 hystrix
Posted
技术标签:
【中文标题】如何在多个假装客户端之一中禁用 hystrix【英文标题】:How to disable hystrix in one of multiple feign clients 【发布时间】:2019-08-07 13:36:24 【问题描述】:在我的 Spring Boot 应用程序中,我使用了多个 feign 客户端 (@FeignClient("hello-service"))。在很多情况下,我需要一个断路器机制,所以我有以下配置。
feign.hystrix.enabled=true
但是我不知道如何配置特定的 feign 客户端不使用 Hystrix。可能吗?有没有人设法以这种方式配置 spring 应用程序?
【问题讨论】:
您需要关注cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/single/…,并创建一个DefaultTargeter
的bean。如果您还没有很快弄清楚,请联系我,我会找时间写一个答案。
【参考方案1】:
您可以使用禁用的 hystrix 功能创建自己的配置,并将其用于必要的客户端。
public class FeignClientConfiguration
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder()
return Feign.builder();
详情见 paragraph 7.4
【讨论】:
【参考方案2】:我想扩展 Roman 的答案,因为我一开始不知道如何使用它。
正如他所说,您需要有这样的配置类
public class MyFeignConfiguration
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder()
return Feign.builder();
你需要把这个配置类包含到你的@FeignClient
中,像这样
@FeignClient(name = "name", url = "http://example.com", configuration = MyFeignConfiguration .class)
public interface MyApi
//...
使用此配置,此客户端将在不使用 Hystrix 包装的情况下构建
【讨论】:
这种方法对我不起作用。添加新的 @Bean 会禁用我在所有 Feign 客户端上的 Hystrix 行为。即使对于那些不使用新配置类的人也是如此。详情看这里***.com/questions/62669138/… 如果 MyFeignConfiguration 类现在有 @Configuration 注解,它应该可以工作。来自官方 Feign 文档:FooConfiguration 不需要使用 @Configuration 进行注释。但是,如果是,请注意将其从任何可能包含此配置的 @ComponentScan 中排除,因为在指定时它将成为 feign.Decoder、feign.Encoder、feign.Contract 等的默认源。这可以通过将其与任何@ComponentScan 或@SpringBootApplication 放在一个单独的、不重叠的包中来避免,也可以在@ComponentScan 中明确排除。以上是关于如何在多个假装客户端之一中禁用 hystrix的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud总结21.单个FeginClient禁用Hystrix