3

春季云doc说:如何微调Spring Cloud Feign客户端?

如果猬是在类路径中,默认情况下假死将包装所有方法 与断路器。

  1. 这是好的,但我怎么配置猬选项忽略某些例外?我有一个ErrorDecoder实现将HTTP状态代码映射到异常。如果我把@HystrixCommand放在方法上,Feign是否会尊重它?
  2. 我们的要求是记录关于每个依赖关系的HTTP调用的各种细节。目前我有一个装饰RestTemplate这样做。根据我在代码中看到的以及基于Dave Syer的回答here,Feign不会使用RestTemplate。那么如何满足日志需求?界面feign.Client看起来很有前途,虽然我不完全确定是否可以使用。

回答

0

就像@spencergibb说的,Feign现在不支持忽略异常,为此我打开了一个enhancement request。 至于我的第二个要求,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(); 
} 
4
  1. 假死不接受@HystrixCommand,不支持忽略例外。我的建议是禁用假名hystrix集成(feign.hystrix.enabled=false)并使用higntrix以外的假名。
  2. Feign支持RequestInterceptor这会给你一个登录的地方。有关更多信息,请参阅the docs

例子:

@FeignClient(name = "stores", configuration = StoreConfiguration.class) 
public interface StoreClient { 
    //.. 
} 

@Configuration 
public class StoreConfiguration { 

    @Bean 
    public LoggingRequestInterceptor loggingRequestInterceptor() { 
     return new LoggingRequestInterceptor(); 
    } 
} 
+0

谢谢例外,我会尽力以上。你怎么看待我打开假装的改进请求来支持'HystrixCommand'注释? –

+0

我不认为它会飞(假装不使用javanica,这是注释的来源),但要求设置被忽略的异常的能力是可以的(因为它的实现无关紧要)。 – spencergibb

+0

https://github.com/spring-cloud/spring-cloud-netflix/issues/1346 –

0

我们使用对这种情况下的例外因此,即使错误的情况下将与HTTP 200,但自己的MIME类型来回应一个自己的MIME类型。然后,我们可以在错误情况下拦截200er响应mime类型通过响应错误代码的反序列化重新抛出与服务器端相同的异常,而不会被回退所困。这个作品wirh Feign和一些FeignBuildwr魔法

+0

你有这种方法的一个以上的问题。为错误情况返回200是违反HTTP规范的。这也不是mime类型的意思。 –

1

你可以写ErrorDecoder并引发HystrixBadRequestException(https://github.com/Netflix/Hystrix/wiki/How-To-Use#error-propagation)上,你想不触发断路器

+0

谢谢。不过,我认为禁用Feign hystrix支持('feign.hystrix.enabled = false')并在调用方法上使用'@ HystrixCommand'更简单。这就是我现在所做的。 –

+0

而你使用@HystrixCommand的ignroeExceptions? –

+0

是的,使用'ignoreExceptions'。 –

相关问题