gpt4 book ai didi

java - 为单个 Feign 客户端禁用 Hystrix

转载 作者:行者123 更新时间:2023-12-01 10:37:17 26 4
gpt4 key购买 nike

我的 SpringBoot 应用程序启用了 Hystrix,并为一些 Feign 客户端定义了回退,其余客户端未定义。
现在,我想为尚未定义回退的那些禁用 Hystrix。所以我遵循了[第 7.4 段] https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html 中列出的步骤这是使用 vanilla Feign.Builder 创建单独的 Feign 配置。但是,添加新的 @Bean Feign.Builder 会禁用我不想要的所有 Feign 客户端的 Hystrix 功能。如果我删除@Bean Feign.Builder,Hystrix 回退会像往常一样在 myhystrixclient 中启动。一个类似的问题在这里 How to disable hystrix in one of multiple feign clients仍然开放。我究竟做错了什么?

public class MyFeignClientConfiguration {

@Bean
public FeignErrorDecoder feignErrorDecoder() {
return new FeignErrorDecoder();
}

@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}
我的 Feign 客户端如下所示:
@FeignClient(name = "myregularclient", configuration = MyFeignClientConfiguration.class)
public interface MyRegularClient {
//my APIs here
}
我的 Hystrix Feign 配置如下所示:
public class MyFeignClientHystrixConfiguration {

@Bean
public FeignErrorDecoder feignErrorDecoder() {
return new FeignErrorDecoder();
}
}
这是我的 Feign 客户端,其中实现了 Hystrix 回退
@FeignClient(name = "myhystrixclient", configuration = MyFeignClientHystrixConfiguration.class, fallback = MyFallbackService.class)
public interface MyHystrixClient {
//my APIs here
}
更新
添加我的 Application.java 以进一步审查组件扫描方面。
@ComponentScan(basePackages ="com.demo.xyz")
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,
MetricFilterAutoConfiguration.class,
MetricRepositoryAutoConfiguration.class})
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class MyApplication {

/** Start the app **/
}

最佳答案

我设法在 Spring Cloud vDalston.SR5 上重现了问题,看来我找到了解决方案。它不会阻止其他使用 hystrix 的假客户端。手动和集成测试对其进行了测试。
创建没有 hystrix 的假客户端。请注意,配置类使用 @Configuration 注解进行注解。

@FeignClient(name = "withoutHystrix",
url = "conrad.fake",
fallback = FeignClientWithoutHystrix.FallbackThatShouldNotOccur.class,
configuration = FeignClientWithoutHystrixConfig.class)
public interface FeignClientWithoutHystrix {

@RequestMapping(method = RequestMethod.GET, value = "/fake/url")
String getFromFakeUrl();

@Component
class FallbackThatShouldNotOccur implements FeignClientWithoutHystrix {

private final Logger log = LoggerFactory.getLogger(this.getClass());

@Override
public String getFromFakeUrl() {
log.error("This fallback shouldn't occur");
return "Fallback";
}
}
}

@Configuration
public class FeignClientWithoutHystrixConfig {

@Bean
public Feign.Builder feignBuilder() {
return Feign.builder();
}

}
使用 excludeFilters 从 @ComponentScan 中排除伪装客户端配置:
@EnableFeignClients
@SpringBootApplication
@ComponentScan(basePackages = "konrad",
excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = FeignClientWithoutHystrixConfig.class)})
public class CloudClient {

public static void main(String[] args) {
SpringApplication.run(CloudClient.class, args);
}

}
启用 hystrix
feign:
hystrix:
enabled: true
如果你想检查任何东西或运行测试,这是我的存储库 https://github.com/MrJavaNoHome/spring-cloud-client

关于java - 为单个 Feign 客户端禁用 Hystrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62669138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com