Отделить слой от многоуровневой архитектуры как микро сервис
Сценарий:
В настоящее время у нас есть многоуровневая архитектура в этом шаблоне
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 способах
Предоставление сервисов в SouthBound как REST API и использование их в SrvcLayer. Это добавит некоторую задержку и потребует выяснения безопасности.
Используйте очередь сообщений как RabbitMQ. Но эти звонки должны быть синхронными. Поэтому я не уверен, что RabbitMQ поможет нам.
Какой подход подойдет. Любое другое предложение о том, как создать этот вариант использования.
1 ответ
В нашем приложении у нас есть REST API для взаимодействия с пользовательским интерфейсом <->, бэкэнд-части которого, в свою очередь, подключены через AMQP.
Кстати, RabbitMQ, похоже, имеет асинхронную поддержку асинхронной поддержки RabbitMQ, поэтому этого может быть достаточно.
Синхронная работа RabbitMQ по-прежнему возможна ( уместно ли использовать очереди сообщений для синхронных вызовов RPC через ajax, https://www.rabbitmq.com/tutorials/tutorial-six-java.html), но в любом случае, если вы используете AMQP синхронно это закончится с задержкой, поэтому я бы сказал, лучше использовать REST