Vin*_*Rai 6 java spring-boot hystrix spring-cloud-feign
我的 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 中启动。一个类似的问题在这里如何在多个假客户端之一中禁用 hystrix仍然是开放的。我究竟做错了什么?
public class MyFeignClientConfiguration {
@Bean
public FeignErrorDecoder feignErrorDecoder() {
return new FeignErrorDecoder();
}
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}
Run Code Online (Sandbox Code Playgroud)
我的 Feign 客户端如下所示:
@FeignClient(name = "myregularclient", configuration = MyFeignClientConfiguration.class)
public interface MyRegularClient {
//my APIs here
}
Run Code Online (Sandbox Code Playgroud)
我的 Hystrix Feign 配置如下所示:
public class MyFeignClientHystrixConfiguration {
@Bean
public FeignErrorDecoder feignErrorDecoder() {
return new FeignErrorDecoder();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 Feign 客户端,其中实施了 Hystrix 回退
@FeignClient(name = "myhystrixclient", configuration = MyFeignClientHystrixConfiguration.class, fallback = MyFallbackService.class)
public interface MyHystrixClient {
//my APIs here
}
Run Code Online (Sandbox Code Playgroud)
更新
添加我的 Application.java 以进一步审查组件扫描方面。
@ComponentScan(basePackages ="com.demo.xyz")
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,
MetricFilterAutoConfiguration.class,
MetricRepositoryAutoConfiguration.class})
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
public class MyApplication {
/** Start the app **/
}
Run Code Online (Sandbox Code Playgroud)
我设法在 Spring Cloud vDalston.SR5 上重现问题,似乎我找到了解决方案。它不会阻止其他使用 hystrix 的假客户端。手动测试并通过集成测试进行测试。
创建没有 hystrix 的 feign 客户端。请注意,配置类使用@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();
}
}
Run Code Online (Sandbox Code Playgroud)
使用 exceptFilters 从 @ComponentScan 中排除 feign 客户端配置:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
启用hystrix
feign:
hystrix:
enabled: true
Run Code Online (Sandbox Code Playgroud)
如果您想检查任何内容或运行测试,这是我的存储库https://github.com/MrJavaNoHome/spring-cloud-client
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |