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

Я реализую продукт, состоящий из n микросервисов (Java, Spring).

Проблема заключается в том, что в некоторых случаях использования интегрируется ex.4 микросервиса, которые взаимодействуют следующим образом:

A -> B -> C -> D

и D выдает исключение при выполнении своей задачи.Служба A должна знать, что источником проблемы является служба D.

Я знаю, что могу реализовать собственный обработчик исключений в службе D, который может возвращать какое-то дополнительное свойство, например exceptionSource="D", и распространять его через все службы, но это не очень круто и требует много ручной реализации.

Знаете ли вы какой-нибудь способ сделать его более автоматическим?Может быть, для этого есть какое-то свойство pattern / library / magic-spring?

1 Ответ

1 голос
/ 09 июля 2019

Определение обработчика исключений и сервера пересылки сообщений об ошибках в каждом микросервисе звучит действительно плохой идеей.
Он разъединяет реализации микросервиса таким образом, что это не обязательно желательно. Мы будем отделять вещи, которые должны быть отделены (такие как данные, логика, развертывание), но поперечные требования между микросервисами не должны дублироваться в каждой реализации микросервиса, в целом, если они полагаются на одни и те же технологии. Это явно не поддается ремонту.

Я вижу два основных способа выполнить вашу задачу:

  • полагаясь на третье приложение, которое связывает / обогащает связь и перехватывает ответ сообщением об ошибке (через определенный шаблон) и обогащает ответ каждого вызывающего абонента ошибкой исходного сообщения до первоначального инициатора.
    Такое решение имеет смысл, если вы уже используете его или используете гетерогенные реализации, касающиеся ваших микросервисов. Вы, кажется, не в этом случае.

  • Определение обработчика исключений (@ControllerAdvice) и перехватчика HTTP (ClientHttpRequestInterceptor) в общей библиотеке всеми микросервисами Java Spring.
    Таким образом, все службы будут выполнять обработку исключений и обработку ошибок, поступающих из ответов других микросервисов, аналогичным образом и без каких-либо усилий.

Просто предупреждение: реализации микросервисов не предназначены для использования только на одной и той же технологии (одна может быть в Java Spring, другая может быть в Java EE, другая в NodeJS и следующая в C #).
Таким образом, опора на определенную функцию Spring может сработать сейчас, но может вызвать некоторые трудности, если позже вы будете использовать другую технологию, такую ​​как Java и Spring.

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