【问题标题】:How to correctly handle inter-service exception in a spring-based microservices architecture如何在基于 Spring 的微服务架构中正确处理服务间异常
【发布时间】:2018-05-13 08:04:01
【问题描述】:

我有一个使用微服务架构开发的应用程序。每个微服务都是一个 spring-boot 应用程序,通过 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"
}

我该怎么做?

【问题讨论】:

    标签: java exception-handling microservices spring-cloud-feign


    【解决方案1】:

    this solution 基于 feign ErrorDecoder(从 feign 异常中提取您需要的内容)和 spring @ExceptionHandler(在 ResponseEntity<Object> 中转储您需要的内容)的组合呢?

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

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2020-07-22
      • 1970-01-01
      • 2020-10-20
      • 2014-01-08
      • 2019-02-15
      • 1970-01-01
      • 2017-03-19
      • 2021-02-05
      相关资源
      最近更新 更多