Я работаю над персональным проектом, который должен преобразовать монолитное веб-приложение в микросервисы (каждая служба имеет свою собственную базу данных).Межкоммуникационные микросервисы - Как?
В настоящий момент монолитный бэкэнд выполнен с помощью NodeJS и способен ответить запросом REST. Когда я начал разбить приложение на несколько сервисов, я столкнулся с следующей проблемой: как сделать общение между ними красиво?
Сначала я пытался использовать REST вызова со следующим примером: «Регистрация Сервис» вставляет интересные вещи в свою базу данных, а затем вперед (HTTP POST) информация о пользователе в «User Service» для того, чтобы сохраниться его в базу данных пользователя. В этом примере у нас есть 2 службы, таким образом, 2 базы данных.
Я понял в этот момент Это был не лучший выбор. Потому что моя «Служба регистрации» зависит от «Пользовательского обслуживания». Они отчасти связаны, и это анти-шаблон концепции микросервисов (из того, что я читал).
Вторая идея заключалась в том, чтобы использовать сообщение message broker как RabbitMQ. «Служба регистрации» по-прежнему вставляет интересные вещи в свою собственную базу данных и публикует сообщение в очереди с информацией пользователя в виде данных. «Пользовательская служба» потребляет это сообщение и сохраняет данные в своей «пользовательской» базе данных. Используя эту концепцию, обе службы полностью изолированы и могут быть отличной идеей.
BUT, как об ответе направить клиенту (кто обратился к «Службе регистрации»). С первой идеей мы могли бы отправить «200, все в порядке!» или 400. Это не проблема. Со второй идеей мы не знаем, сохранял ли пользователь («Пользовательская служба») пользовательские данные, так что мне нужно ответить клиенту?
У меня такая же проблема со стороны магазина веб-приложения. Клиент отправляет продукт, который он хочет купить, на «Заказать услугу». Это нужно проверить виртуальные деньги, которые у него есть на «Сервис пользователя», а затем перенаправить деталь продукта в «Доставка услуги», если у пользователя достаточно денег. Как это сделать с полностью изолированными услугами?
Я не хочу использовать время запроса http от клиента, чтобы сделать асинхронный запрос/ответ на брокер сообщений.
Я надеюсь, что некоторые из вас просветят меня.
Читайте это: http://stackoverflow.com/questions/30213456/transactions-across-rest-microservices –