Отделить слой от многоуровневой архитектуры как микро сервис

Сценарий:

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

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 ответ

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

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

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

Другие вопросы по тегам