Hystrix断路机制下的Exception异常传递

探讨了在基于SpringCloud的微服务项目中,结合DDD领域设计模型,如何有效处理Feign调用产生的异常,特别是在Hystrix熔断机制下的异常响应与降级策略。

本菇凉最近发现一个很奇特的问题,基于SpringCloud的微服务项目下与DDD领域设计模型的架构下,难免会存在服务间大量相互Feign调用的场景,但是当一些模块开发人员进行个体服务开发时,走进异常流程会直接抛出基于RuntimeException的封装好的异常信息给到前端,这原本是非常常见的做法,但是基于DDD领域模型的设计思想下,经常性的需要对后端各服务进行接口聚合封装,提供统一的API入口,分离领域与api,那么原先已开发好的子服务的流程Exception,经过这一层Feign的封装聚合调用,FeignClient无法感知到下层服务抛出的指定http状态码code和msg。遇到异常则直接响应如下


{
 "timestamp": "2017-12-27 15:01:53",
  "status": 500,
  "error": "Internal Server Error",
  "exception": xxxxxxxx,
  "message": "Request processing failed; nested exception is {\"code\":1000, \"message\":\"test Exception\"}",
  "path": xxxxx
  }

异常链无法向上层逐一递交,除了微服务无状态的特性外,还有更重要的原因:Hystrix熔断器

首先来看一下最最简单的Hystrix断路机制的傻瓜逻辑
Hystrix熔断与fallback
当服务A发出Feign请求时,首先会通过gateway路由到目标调用服务B上,若B服务在调用接口时发生抛出异常,则httpstatus状态码会返回一个非200的值,Hystrix熔断器针对这样的Feign响应,会统一处理为500,INTER_ERROR,响应msg中也会提示由服务A调服务B时,发生了异常。

Hystrix提供

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值