在 做商城的项目的 购物车的微服务管理时,请求发送之后是显示添加成功的
但是,查看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中查看到新的数据