Spring cloud 如何微调SpringCloud虚拟客户端?

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。那么如何满足日

春云说:

如果Hystrix在类路径上,默认情况下,Feign将包装所有方法 用断路器

  • 这很好,但是如何配置Hystrix选项以忽略某些异常?我有一个
    ErrorDecoder
    实现,它将HTTP状态代码映射到异常。如果我把
    @HystrixCommand
    放在这个方法上,假装尊重这个吗
  • 我们的要求是记录每个对依赖项的HTTP调用的各种细节。目前,我有一个装饰过的
    rest模板
    ,可以实现这一点。根据我在代码中看到的情况以及Dave Syer的回答,Feign没有使用
    RestTemplate
    。那么如何满足日志记录要求呢?界面
    feign.Client
    看起来很有前途,尽管我不完全确定这是否是要使用的界面
  • Feign不支持
    @HystrixCommand
    ,也不支持忽略异常。我的建议是禁用feigns-hystrix集成(
    feign.hystrix.enabled=false
    ),并在feign之外使用hystrix
  • 外挂支持
    RequestInterceptor
    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