【Spring Cloud】Feign调用异常触发降级后如何捕获异常
一、问题背景
在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调用的异常信息
推荐阅读
【Redisson】分布式锁的源码解析
分布式锁在实际工作中的应用还是比较多的,其实现方式也有很多种,常见的有基于数据库锁、基于zookeeper、基于redis的,今天我们来讲下基于redis实现的分布式锁。
kamier阅读 762
SpringCloud-使用Feign跨服务调用最佳方式
最近在学习如何使用springcloud,当学习到跨服务调用接口时接触到Feign和Ribbon,网上有好多文章是介绍他们俩的区别的,有兴趣的可以看看,本文主要推荐使用Feign并记录操作过程。
Awbeci赞 2阅读 3.2k
5大主流方案对比:MySQL千亿级数据线上平滑扩容实战
在项目初期,我们部署了三个数据库A、B、C,此时数据库的规模可以满足我们的业务需求。为了将数据做到平均分配,我们在Service服务层使用uid%3进行取模分片,从而将数据平均分配到三个数据库中。
码猿技术专栏赞 2阅读 629
SpringCloud Gateway 通过 Nacos 配置动态路由 (代码片段)
{代码...}
毛宇鹏阅读 3.9k
Java-微服务架构之认证服务
之前通过阅读《Spring微服务实战》写过关于spring-cloud+spring-security+oauth2的认证服务和资源服务文章,以及写过关于spring-gateway做token校验的文章,但是在实战过程中还是发现一些问题,于是通过跟朋友沟...
Awbeci阅读 1.1k
一天吃透SpringCloud面试八股文
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
程序员大彬阅读 548
Ribbon的基础使用模板
Ribbon是Spring Cloud核心组件之一,它提供的最重要的功能就是负载均衡,和硬件负载均衡F5不同,它的负载均衡是基于客户端的,Zuul网关和Feign可以通过Ribbon轻松的实现服务的负载均衡,同时避免了与业务无关的冗...
不语阅读 464
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。