一、问题背景
在Spring Cloud的微服务架构中,通常微服务之间通过feign/openfeign来进行http调用,并且启用hystrix并配置降级策略fallback,可以在http调用异常时触发降级
,代码如下
@FeignClient(name = "resourceFeign", fallback = ResourceFeignFallback.class)
public interface ResourceFeign {
@PostMapping("/resource/list")
Map<String, Object> resourceList();
}
@Component
public 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
@Slf4j
public 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调用的异常信息
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。