Допустим, у меня есть 3 микросервиса - A, B и C.
Шаблон связи через эти сервисы выглядит так
этот:
A -> B -> C
.
Службы B
и C
могут выдать исключение и вернуть 500 вызывающей стороне. В сервисе A
мне нужно распознать, выбрасывает ли сервис B
или C
исключение (возвращается 500). Каковы некоторые общие шаблоны для такой проблемы? Я думал о:
Добавление к ответам дополнительного поля B
и C
, которое будет представлять службу, вызвавшую проблему, и распространение ее через службы, например. если служба C
вернет 500, это поле будет скопировано в ответ службы B
и распространено на службу A
. С другой стороны, если служба B
вызовет проблему, она добавит это поле в свой ответ 500 со значением, представляющим службу B
.
Распознавание того, какая служба вызвала исключение, по классу исключений или сообщению об ошибке
Оба подхода имеют свои недостатки - при первом подходе я должен был бы обработать добавление этого поля к ответам и распространение его из службы C
через службу B
в службу A
, и если он хотел бы добавить это поведение к Больше услуг, это включает в себя много дублирования кода через сервисы. С другой стороны, в случае второго подхода просто нехорошо.
Знаете ли вы какие-либо шаблоны или, возможно, библиотеки / фреймворки для такой проблемы?