Отделить слой от многоуровневой архитектуры как микро сервис - PullRequest
0 голосов
/ 09 ноября 2018

Сценарий:

В настоящее время мы имеем многоуровневую архитектуру по этому шаблону

DBLayer => Tasks to DB
SouthBound => Talks to other devices like router/controller
SrvcLayer => Talks to both SouthBound and DBLayer
UILayer => Talks to UI and SrvcLayer

Приложение построено на Spring 4.2, Java 8, MongoDB.

Требования:

Нам нужно отделить SouthBound как отдельное приложение или, скажем, Micro Service.

Проблема:

Мы думаем о 2 путях

  1. Предоставление сервисов в SouthBound как REST API и использование их в SrvcLayer. Это добавит некоторую задержку и потребует выяснения безопасности.

  2. Использовать очередь сообщений, например, RabbitMQ. Но эти звонки должны быть синхронными. Поэтому я не уверен, что RabbitMQ нам поможет.

Какой подход подойдет. Любое другое предложение о том, как создать этот вариант использования.

1 Ответ

0 голосов
/ 09 ноября 2018

В нашем приложении у нас есть REST API для связи с пользовательским интерфейсом <-> Бэкенд, части которого, в свою очередь, подключены через AMQP.

Кстати, у RabbitMQ, похоже, есть асинхронная поддержка Асинхронная поддержка RabbitMQ , так что этого может быть достаточно.

Синхронная работа RabbitMQ по-прежнему возможна ( Уместно ли использовать очереди сообщений для синхронных вызовов RPC через ajax , https://www.rabbitmq.com/tutorials/tutorial-six-java.html), но в любом случае, если вы используете AMQP синхронно, это закончится с задержкой, поэтому я бы сказал, лучше использовать REST

...