FallBack服务降级,显示详细错误信息:使用 fallbackFactory

本文讲述了在微服务架构中,针对Feign客户端调用服务出现的降级情况,如何通过fallbackFactory进行异常处理。在购物车模块,请求发送成功但实际数据库未更新,原因是服务降级且未打印详细日志。通过添加fallbackFactory,当调用失败时,能够捕获并打印错误信息,从而定位问题在于请求路径不正确。修复路径问题后,服务恢复正常,数据能够正确写入Redis数据库。
摘要由CSDN通过智能技术生成

在 做商城的项目的 购物车的微服务管理时,请求发送之后是显示添加成功的

但是,查看redis数据库。数据是空的

 

查看 idea的控制台

发现产生了服务降级,但是没有详细的错误日志打印

 

 

我们可以使用fallbackFactory打印feign调用的异常 ===  feign调用异常处理

 

1、产生 fallbackFactory的组件

2、在FeignClient注解中通过fallbackFactory属性指定配置上面的组件

配置的全部代码:

package com.zzj.shiyou.search.client;

import com.zzj.shiyou.item.api.SkuApi;
import com.zzj.shiyou.item.po.Sku;
import feign.hystrix.FallbackFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@FeignClient(name = "item-service", /*fallback = SkuClient.SkuClientFallback.class*/
        fallbackFactory = SkuClient.SkuClientFallbackFactory.class)
public interface SkuClient extends SkuApi {
    @Component
    @RequestMapping("/sku-fallback")
            //这个可以避免容器中requestMapping重复
    class SkuClientFallback implements SkuClient {
        private static final Logger LOGGER = LoggerFactory.getLogger(SkuClientFallback.class);


        @Override
        public List<Sku> selectSkusBySpuId(Long spuId) {
            LOGGER.error("异常发生,进入fallback方法");
            return null;
        }

        @Override
        public Sku edit(Long id) {
            LOGGER.error("异常发生,进入fallback方法");
            return null;
        }
    }

    @Component
    @RequestMapping("/sku-fallback-factory")
    class SkuClientFallbackFactory implements FallbackFactory<SkuClient>{
        Logger logger = LoggerFactory.getLogger(SkuClientFallbackFactory.class);
        @Override
        public SkuClient create(Throwable throwable) {
            throwable.printStackTrace();
            logger.error(throwable.getMessage());

            return new SkuClient() {
                @Override
                public List<Sku> selectSkusBySpuId(Long spuId) {
                    return null;
                }
                @Override
                public Sku edit(Long id) {
                    return null;
                }
            };
        }
    }
}

 

配置之后重启,再次访问就会爆出错误原因

 

 

错误原因是:由于之前没有配置网关,所有的请求路径都加了/item,后面配置了网关,就应该去掉/item

 

重启服务之后,就可以在redis中查看到新的数据

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值