微服务架构中的错误传播

时间:2019-07-10 18:03:59

标签: java spring rest

假设我有3个微服务-A,B和C。

通过这些服务的通信模式看起来像 这个: A -> B -> C

服务BC会引发异常,并向调用方返回500。在服务A中,我需要识别服务BC引发了异常(返回500)。这种问题有哪些常见的模式?我在想:

  • BC的响应中添加了其他字段,该字段代表引起问题的服务,并通过服务(例如,如果服务C返回500,则此字段将被复制到服务B的响应中并传播到服务A。另一方面,如果服务B会引起问题,则会将该字段添加到其500响应中,并使用代表服务B的值。

  • 通过异常类或错误消息识别哪个服务导致异常

两种方法都有缺点-在第一种方法中,我将不得不处理将此字段附加到响应,并将其从服务C到服务B到服务A的传播,如果可以的话想要将此行为添加到更多服务中,这涉及通过服务进行大量代码重复。另一方面,如果采用第二种方法,则会感到不对。

您知道此类问题的任何模式或库/框架吗?

1 个答案:

答案 0 :(得分:2)

对于这种典型问题,您必须使用断路器样式。我建议您学习由Netflix团队开发的Hysterix断路器框架。点击这些链接。

https://github.com/Netflix/Hystrix/wiki/How-it-Works

https://spring.io/guides/gs/circuit-breaker/

如Turing85所评论的那样,在调用服务b和服务c时不应影响服务A。