Caused by: java.lang.IllegalStateException: Incompatible fallback instance. Fallback/fallbackFactory of type class com.baicun.springcloudconsumer.springcloudconsumer.hystrix.FeignClientFallbackFactory is not assignable to interface com.baicun.springcloudconsumer.springcloudconsumer.client.FeignClient for feign client SPRINGCLOUD-PROVIDER
at org.springframework.cloud.openfeign.HystrixTargeter.getFromContext(HystrixTargeter.java:86) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.openfeign.HystrixTargeter.targetWithFallback(HystrixTargeter.java:70) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.openfeign.HystrixTargeter.target(HystrixTargeter.java:46) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:238) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:267) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:247) ~[spring-cloud-openfeign-core-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
... 30 common frames omitted
分析原因:
hystrix 降级我是fallbackFactory来进行处理,但是feignclient注解定义回退的类型是fallback,类型不一致导致。
@Component public class FeignClientFallbackFactory implements FallbackFactory<FeignClient> {...}@org.springframework.cloud.openfeign.FeignClient(value = "SPRINGCLOUD-PROVIDER",fallback = FeignClientFallbackFactory.class) public interface FeignClient {...}
解决方案:
将接口 @FeignClient 中,hystrix降级定义改成:
@org.springframework.cloud.openfeign.FeignClient(value = "SPRINGCLOUD-PROVIDER",fallbackFactory = FeignClientFallbackFactory.class) public interface FeignClient {...}