Spring cloud 如何微调SpringCloud虚拟客户端?
春云说: 如果Hystrix在类路径上,默认情况下,Feign将包装所有方法 用断路器Spring cloud 如何微调SpringCloud虚拟客户端?,spring-cloud,spring-cloud-netflix,netflix-feign,spring-cloud-feign,feign,Spring Cloud,Spring Cloud Netflix,Netflix Feign,Spring Cloud Feign,Feign,春云说: 如果Hystrix在类路径上,默认情况下,Feign将包装所有方法 用断路器 这很好,但是如何配置Hystrix选项以忽略某些异常?我有一个ErrorDecoder实现,它将HTTP状态代码映射到异常。如果我把@HystrixCommand放在这个方法上,假装尊重这个吗 我们的要求是记录每个对依赖项的HTTP调用的各种细节。目前,我有一个装饰过的rest模板,可以实现这一点。根据我在代码中看到的情况以及Dave Syer的回答,Feign没有使用RestTemplate。那么如何满足日
ErrorDecoder
实现,它将HTTP状态代码映射到异常。如果我把@HystrixCommand
放在这个方法上,假装尊重这个吗rest模板
,可以实现这一点。根据我在代码中看到的情况以及Dave Syer的回答,Feign没有使用RestTemplate
。那么如何满足日志记录要求呢?界面feign.Client
看起来很有前途,尽管我不完全确定这是否是要使用的界面@HystrixCommand
,也不支持忽略异常。我的建议是禁用feigns-hystrix集成(feign.hystrix.enabled=false
),并在feign之外使用hystrixRequestInterceptor
s,它将为您提供一个登录位置。有关更多信息,请参阅@FeignClient(name = "stores", configuration = StoreConfiguration.class)
public interface StoreClient {
//..
}
@Configuration
public class StoreConfiguration {
@Bean
public LoggingRequestInterceptor loggingRequestInterceptor() {
return new LoggingRequestInterceptor();
}
}
在这种情况下,我们对异常使用自己的mime类型,因此即使是错误情况也将使用http 200响应,但使用自己的mime类型。然后,我们可以在出现错误mime类型的情况下截获200er响应,并通过从响应错误代码反序列化重新引发与服务器端相同的异常,而不会被回退捕获。这是一个很好的例子,比如@Spencergib所说的,Faign现在不支持忽略异常,为此我打开了一个。 至于我的第二个需求,
RequestInterceptor
不会削减它,因为我需要响应时间,RequestInterceptor
无法访问响应时间。我最终实现了feign.Client
,并记录了execute
方法所花费的时间。大部分代码取自feign.Client.Default
,可惜该类不是为扩展而设计的。然后,我在一个FeignBuilder
中使用我的自定义客户端,如下所示:
@Bean
@Scope(SCOPE_PROTOTYPE)
public Feign.Builder feignBuilder() {
return HystrixFeign.builder()
.client(loggingEnabledFeignClient());
}
@Bean
Client loggingEnabledFeignClient() {
return new LoggingEnabledFeignClient();
}
您可以编写ErrorDecoder并在不希望触发断路器的异常时抛出hystrixBaddrequesException()谢谢,我将尝试上述方法。你觉得我为Faign打开一个改进请求来支持
HystrixCommand
注释怎么样?我不认为它会飞起来(Faign不使用javanica,这是注释的来源),但是要求能够设置忽略的异常是可以的(因为它与实现无关)。嗯,它可能需要在两个地方都完成工作,所以你没事。好吧,你的第一个建议行得通,第二个不行。我需要记录调用的持续时间,RequestInterceptor
不允许我这样做。这都是关于提出请求的问题。你对这种方法有不止一个问题。对于错误案例返回200违反了HTTP规范。而且mime类型也不是这个意思。谢谢。但是,我认为在调用方方法上禁用Feign-hystrix支持(Feign.hystrix.enabled=false
)并使用@HystrixCommand
)更简单。这就是我现在正在做的。是的,使用ignoreExceptions
。