Распространение ошибок в архитектуре микросервисов - PullRequest
0 голосов
/ 10 июля 2019

Допустим, у меня есть 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, и если он хотел бы добавить это поведение к Больше услуг, это включает в себя много дублирования кода через сервисы. С другой стороны, в случае второго подхода просто нехорошо.

Знаете ли вы какие-либо шаблоны или, возможно, библиотеки / фреймворки для такой проблемы?

1 Ответ

2 голосов
/ 10 июля 2019

Для этого типа типичной проблемы вы должны использовать Схема автоматического выключателя .Я бы посоветовал вам изучить Hysterix, созданный командой Netflix.Перейдите по этим ссылкам.

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

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

Как прокомментировал Turing85, служба A не должна подвергаться воздействию при вызове службы b и службы c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...