繁体   English   中英

如何在基于Spring的微服务架构中正确处理服务间异常

[英]How to correctly handle inter-service exception in a spring-based microservices architecture

我有一个使用微服务架构开发的应用程序。 每个微服务都是一个弹簧启动应用程序,可通过FeignClient接口与其他微服务进行通信。

假设A是一个调用微服务B的微服务(RestAPI)。在正常情况下,B用对象X进行回复,这是A为客户端提供的JSON响应。

但是,如果B抛出异常,我会像这样向客户端获取一个中文框异常:

{
    "timestamp": 1511965051071,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "Exception",
    "message": { "\"timestamp\":1511965051052,\"status\":422,\"error\":\"Unprocessable Entity\",\"exception\":\"java.lang.MyException\",\"message\":\"Error message from B\",\"path\":\"PATH-OF-B-SERVICE\"}",
    "path": "PATH-OF-A-SERVICE"
}

换句话说,MyException(状态422)被“嵌入”在A Exception(状态500)中。

我想用内部JSON回复客户端,即:

{
    "timestamp": 1511965051052,
    "status": 422,
    "error": "Unprocessable Entity",
    "exception": "java.lang.MyException",
    "message": "ErrormessagefromB",
    "path": "PATH-OF-B-SERVICE"
}

我怎样才能做到这一点?

基于ErrorDecoder (从@ExceptionHandler异常中提取您需要的内容)和spring @ExceptionHandler (在ResponseEntity<Object>转储您的所需内容)的组合, 该解决方案又如何呢?

我选择将错误有效载荷转换为我的API通用的错误有效载荷,但实际上,您可以保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM