The Spring Cloud doc says:
If Hystrix is on the classpath, by default Feign will wrap all methods with a circuit breaker.
- That's good but how do I configure the Hystrix options to ignore certain exceptions? I've an
ErrorDecoder
implementation that maps HTTP status code to exceptions. If I put@HystrixCommand
on the method, does Feign honor that? - Our requirement is to log various details about every HTTP call made out to dependencies. Currently I've a decorated
RestTemplate
that does this. From what I see in the code and based on Dave Syer's answer here, Feign does't use aRestTemplate
. So how do I meet the logging requirement? The interfacefeign.Client
looks promising, although I'm not entirely sure if that's the one to use.
You can write ErrorDecoder and throw HystrixBadRequestException (https://github.com/Netflix/Hystrix/wiki/How-To-Use#error-propagation) on exception that you want no to trigger the circuit breaker
@HystrixCommand
and doesn't support ignoring exceptions. My suggestion is to disable feigns hystrix integration (feign.hystrix.enabled=false
) and use hystrix outside of feign.RequestInterceptor
s that will give you a place to log. See the docs for more information.Example:
We use an own mime type for exceptions in such case so even error cases will be responded with http 200 but own mime type. Then we can intercept the 200er response in case of error mime type an rethrow the same exception as on server side by deserialisation from response error code without being trapped by a fallback. This works wirh Feign and some FeignBuildwr Magic
Like @spencergibb said, Feign doesn't support ignoring exception now, for which I opened an enhancement request. As for my second requirement, a
RequestInterceptor
doesn't cut it because I need the response time, which theRequestInterceptor
doesn't have access to. I ended up implementing thefeign.Client
and logging the time taken by theexecute
method. Most of the code is taken fromfeign.Client.Default
, too bad that that class is not designed for extension. I then use my custom client in aFeignBuilder
as follows: