背景
在微服务架构中,A服务调用B服务,当B服务中抛出异常时,我们的意愿是能够获取到所有的异常信息,并且可以触发服务的熔断降级。
但由于全局异常处理机制的存在,会帮我们处理B服务中抛出的异常,并把HTTP的状态码设置为200,那么此时对A服务来说,对B服务抛出的异常是无感知的,仍会继续业务代码的执行,并且不会触发服务的熔断降级,可能会导致微服务系统的雪崩。
注意:这里要区分业务状态码和HTTP的相应状态码,业务状态码是无法触发降级的。
场景
现在有个服务A 和服务B部分代码
服务A 的代码
@RestController
@Slf4j
public class AController {
@Autowired
private FeignClient feignClient;
@GetMapping("/consumer/test")
public CommonResult test() {
//调用服务
log.info("--------------服务A开始调用B服务---------");
CommonResult commonResult = feignClient.getName();
//返回结果
return commonResult;
}
}
Feign客户端的代码
@FeignClient(value = "myServe