SpringCloud-Hystrix【Feign处理降级-异常记录】

915 阅读1分钟

前面的文章介绍了Hystrix处理Feign调用时的降级处理,但是现在有个问题是如果我们调用provider服务的时候出现了故障从而返回了托底数据,我们怎么查看故障的日志信息呢?前面的处理我们是无法获取到consumer调用provider的错误信息的。

在这里插入图片描述

Feign降级记录异常信息

1.创建项目

  创建一个普通的SpringCloud项目

在这里插入图片描述

2.基本设置

  相关的依赖和前面的项目是一样的。

在这里插入图片描述

3.添加FallbackFactory类

  添加一个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方法,返回的是业务接口的匿名内部类,在内部类中返回托底数据,同时在该方法中记录异常日志信息。

4.业务层设置

  注意将原来的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();

}

5.测试

  不启动provider的情况下,启动consumer访问,返回托底数据,然后查看日志信息

在这里插入图片描述

在这里插入图片描述

控制台能够看到我们记录的异常日志信息~