gpt4 book ai didi

java - 微服务架构中的错误源传播

转载 作者:行者123 更新时间:2023-11-30 10:02:23 24 4
gpt4 key购买 nike

我正在实现一个由 n 个微服务(Java、Spring)组成的产品。

问题是当某些用例集成 ex 时。 4 个这样通信的微服务:

A -> B -> C -> D

并且 D 在执行其任务时抛出异常。服务 A 需要知道问题的根源是服务 D。

我知道我可以在服务 D 中实现一个自定义异常处理程序,它可以返回一些额外的属性,例如 exceptionSource="D" 并将其传播到所有服务,但这并不是很酷,需要一个大量手动实现。

你知道有什么方法可以让它更自动化吗?也许有一些 pattern/library/magic-spring-property?

最佳答案

在每个微服务中定义一个异常处理程序和一个错误消息转发器听起来确实是个坏主意。
它以一种不一定需要的方式解耦微服务实现。我们将解耦需要解耦的东西(例如数据、逻辑、部署),但微服务之间的横向需求不应该在每个微服务实现中重复,总体而言,如果它们依赖于相同的技术。这显然是不可维护的。

我看到有两种主要方法可以完成您的任务:

  • 依赖第三个应用程序来网格化/丰富通信并拦截带有错误消息的响应(通过特定模式)并丰富每个调用者的响应将源消息错误直到原始调用者。< br/>如果您已经在使用这种解决方案,或者如果您使用有关微服务的异构实现,那么这种解决方案就很有意义。你好像不是这种情况。

  • 在所有 Java Spring 微服务的共享库中定义异常处理程序 (@ControllerAdvice) 和 HTTP 拦截器 (ClientHttpRequestInterceptor)。
    通过这种方式,所有服务都将以类似的方式毫不费力地执行异常处理和来自其他微服务响应的错误处理。

只是一个警告:微服务实现并非旨在依赖相同的技术(一个可能在 Java Spring 中,另一个可能在 Java EE 中,另一个在 NodeJS 中,下一个在 C# 中)。
因此,依赖 Spring 的特定功能现在可能会起作用,但如果以后您使用另一种技术(如 Java 和 Spring),可能会造成一些困难。

关于java - 微服务架构中的错误源传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56959625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com