前面的文章介绍了Hystrix处理Feign调用时的降级处理,但是现在有个问题是如果我们调用provider服务的时候出现了故障从而返回了托底数据,我们怎么查看故障的日志信息呢?前面的处理我们是无法获取到consumer调用provider的错误信息的。
创建一个普通的SpringCloud项目
相关的依赖和前面的项目是一样的。
添加一个Hystrix返回托底数据的工具类,如下:
@Component
public class ProductServiceFallbackFactory implements FallbackFactory<ProductConsumerService> {
private Logger logger = Logger.getLogger(ProductServiceFallbackFactory.class);
@Override
public ProductConsumerService create(Throwable throwable) {
return new ProductConsumerService() {
/**
* 能够返回托底数据的 fallback 方法
* @return
*/
@Override
public List<Product> findAll() {
// log 异常信息
logger.warn("fegin fallback Exception:"+throwable);
List<Product> list = new ArrayList<>();
list.add(new Product(-1, "我是托底数据"));
return list;
}
};
}
}
注意:实现的接口必须是FallbackFactory而泛型为业务接口。重新create方法,返回的是业务接口的匿名内部类,在内部类中返回托底数据,同时在该方法中记录异常日志信息。
注意将原来的fallback属性改为fallbackFactory属性。
/**
* feign 做服务降级处理
* 不需要继承 ProductService接口
* fallback属性关联托底数据类
*/
@FeignClient(name="shop-product-provider" ,fallbackFactory = ProductServiceFallbackFactory.class)
public interface ProductConsumerService {
@RequestMapping(value="/product/findAll",method= RequestMethod.GET)
public List<Product> findAll();
}
不启动provider的情况下,启动consumer访问,返回托底数据,然后查看日志信息
控制台能够看到我们记录的异常日志信息~ 案例代码:https://github.com/q279583842q/SpringCloud-dpb-Demo