RabbitMQ и разделение приложений

Мне нужно настроить RabbitMQ, чтобы попытаться изменить нашу архитектуру с использованием асинхронного обмена сообщениями.

Существующий поток приложений:

  • Веб-приложение JEE (через браузер) создает новый поток.
  • Этот поток создает новый процесс ОС для вызова сценария Perl для выполнения некоторой обработки.
  • Сценарий Perl записывает свой вывод в файл, и управление возвращается потоку.
  • Затем поток читает выходной файл и загружает результаты в базу данных.
  • Управление передается сервлету, который отображает результат в пользовательском интерфейсе.

Все это синхронно и отнимает много времени, и нам нужно преобразовать это в асинхронный обмен сообщениями.

Теперь я планирую разбить это на следующие компоненты, но не уверен, что это будет работать с RabbitMQ:

Разбивка приложения:

  • Веб-приложение JEE, которое является производителем RabbitMQ
  • Выделите сценарий Perl в отдельное приложение, поддерживающее связь RabbitMQ. Этот Perl-клиент примет сообщение, обработает его и поместит новое сообщение в RabbitMQ для следующего шага.
  • Разделите выходной файл для загрузчика базы данных на собственное Java-приложение, которое поддерживает связь RabbitMQ. При этом будет использовано сообщение из очереди, соответствующее сообщению клиента Perl из предыдущего шага.

Таким образом, выходные данные будут доступны в базе данных, и асинхронный поток будет завершен.

  1. Возможно ли таким образом разделить приложения, совместимые с RabbitMQ?
  2. Есть ли лучшие способы сделать это?
  3. Пожалуйста, предложите некоторые компоненты фреймворка для RabbitMQ и Perl.

Цените свой вклад в это.


person user1549605    schedule 02.09.2016    source источник


Ответы (1)


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

Чтобы использовать RabbitMQ, я рекомендую вам модуль CPAN AnyEvent::RabbitMQ. Как указано в документации, AnyEvent::RabbitMQ можно использовать для:

  • Объявить и удалить биржи
  • Объявление, удаление, привязка и отвязка очередей
  • Установите QoS и подтвердите режим
  • Публиковать, потреблять, получать, подтверждать, восстанавливать и отклонять сообщения
  • Выбор, фиксация и откат транзакций
person Miguel Prz    schedule 03.09.2016