![](/img/trans.png)
[英]Why should you convert a mail based inter-service communication system to a Message based system
[英]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.