Связь микросервисов при удалении объекта - PullRequest
0 голосов
/ 26 января 2019

Наше приложение состоит из микросервисов.На моей стороне, перед удалением чего-либо, это может быть использовано в другом микросервисе.Поэтому мне нужно попросить другой микросервис, что-то используется на вашей стороне.Для этого я отправляю событие с помощью spring-cloud-event-bus, и мне нужно подождать, пока ответ придет, поэтому я не могу вернуть ни одного ответа в пользовательском интерфейсе.Кроме того, я могу принять ответ в классе слушателя.Как мне переслать сообщение контроллеру?Как мне управлять процессом.

У меня есть идея, но я думаю, что она не имеет смысла. Когда приходит запрос на удаление, я отправляю событие в другой микросервис и жду ответа.Я сохраняю ответ другого микросервиса на mongodb с идентификатором объекта, который будет удален.Кстати, контроллер проверяет базу данных на получение ответа

1 Ответ

0 голосов
/ 27 января 2019

У вас есть более серьезная проблема: один микросервис должен принимать решение на основе части данных, которой он не владеет.

Эти данные в конечном итоге непротиворечивы.Например, микросервис A получит разрешение от микросервиса B на удаление чего-либо, но в то же время ситуация на микросервисе B изменится: вы удалите что-либо на основе информации с истекшим сроком действия.

Я предлагаю взглянуть на вашдизайн в целом, может быть, вы пропустили какую-то важную концепцию или разбили монолит на неправильные микросервисы.

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

Локальный кеш можно обновлять с помощью событий.Всякий раз, когда микросервис B начинает использовать ресурс, он информирует об этом микросервис A;то же самое, когда он больше не использует ресурс.Использование событий является предпочтительным способом.Здесь вы можете использовать свою шину событий.

Или вы можете использовать фоновую задачу, которая запускается периодически;Преимущество этого заключается в том, что микросервис B остается нетронутым, но имеет тот недостаток, что между синхронизациями может быть большой промежуток времени.

...