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