一、问题背景

在Spring Cloud的微服务架构中,通常微服务之间通过feign/openfeign来进行http调用,并且启用hystrix并配置降级策略fallback,能够在http调用异样时触发降级,代码如下

@FeignClient(name = "resourceFeign", fallback = ResourceFeignFallback.class)public interface ResourceFeign {    @PostMapping("/resource/list")    Map<String, Object> resourceList();}@Componentpublic class ResourceFeignFallback implements ResourceFeign {  @Override  public Map<String, Object> resourceList() {    Map result = new HashMap<>();    result.put("code", 500);    result.put("msg", "申请异样");    return result;  }}

然而这种形式在http调用异样时,会间接执行降级策略,而无奈捕捉到具体的异样信息,这种状况如何解决?

二、解决办法

所以咱们通常应用另一种形式,通过配置fallbackFactory来捕捉异样信息,代码如下

@FeignClient(name = "resourceFeign", fallbackFactory = ResourceFeignFallbackFactory.class)public interface ResourceFeign {    @PostMapping("/resource/list")    Map<String, Object> resourceList();}@Component@Slf4jpublic class ResourceWebFeignFallbackFactory implements FallbackFactory<ResourceFeign> {    @Override    public ResourceFeign create(Throwable throwable) {        // 捕捉异样        log.error(throwable.getMessage());        return new ResourceFeign() {            @Override            public Map<String, Object> resourceList() {                  Map result = new HashMap<>();                  result.put("code", 500);                  result.put("msg", "申请异样");                  return result;            }        };    }}

这样就能够捕捉到http调用的异样信息