springCloud熔断器hystrix测试
已知提供方服务没启动,通过消费者服务调用该提供方服务,进入熔断状态,进入熔断方法。
配置的消费者服务和熔断器工厂类
调用消费者服务 成功进入熔断回调
接下来根据调试步骤走一下
当使用feign接口调用服务时,首先创建一个(org.springframework.cloud.openfeign.FeignCircuitBreakerInvocationHandler)的代理类,然后 调用invoke()方法
图中的nullablefallbackfactory就是我们定义feign接口时注解标识的熔断回滚类。
下图中的
invoke()方法代码 先配置circuitBreaker伤对象属性,然后判断feign接口是否有配置熔断回调,如果有则在抛出异常后使用this.nullableFallbackFacotry执行create(throwable)方法,由于his.nullableFallbackFacotry对象
已经被我们在创建feign接口服务时自定义了相应的javabean对象且被spring容器管理加载了,因此这个fallback对象也就是我们自定义的熔断对象,然后这个通过反射去调用代码。
((Method)this.fallbackMethodMap.get(method))这个方法就是feign服务调用的方法(我定义的方法是getTest()),fallback对象就是spring容器启动时注入的FeignControllerFallBack对象的javaBean,因此通过反射调用就进入了getTest()方法,
然后再控制台打印"feign熔断进入".
--------------------------------------------------------------------------------------
然后看看this.nullableFallbackFacotry对象是如何注入的,在spring服务启动时,
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory工厂类创建javaBean对象
然后进入docreateBean方法 找到feign类的beanRegistrar类