Мне нужно настроить RabbitMQ, чтобы попытаться изменить нашу архитектуру с использованием асинхронного обмена сообщениями.
Существующий поток приложений:
- Веб-приложение JEE (через браузер) создает новый поток.
- Этот поток создает новый процесс ОС для вызова сценария Perl для выполнения некоторой обработки.
- Сценарий Perl записывает свой вывод в файл, и управление возвращается потоку.
- Затем поток читает выходной файл и загружает результаты в базу данных.
- Управление передается сервлету, который отображает результат в пользовательском интерфейсе.
Все это синхронно и отнимает много времени, и нам нужно преобразовать это в асинхронный обмен сообщениями.
Теперь я планирую разбить это на следующие компоненты, но не уверен, что это будет работать с RabbitMQ:
Разбивка приложения:
- Веб-приложение JEE, которое является производителем RabbitMQ
- Выделите сценарий Perl в отдельное приложение, поддерживающее связь RabbitMQ. Этот Perl-клиент примет сообщение, обработает его и поместит новое сообщение в RabbitMQ для следующего шага.
- Разделите выходной файл для загрузчика базы данных на собственное Java-приложение, которое поддерживает связь RabbitMQ. При этом будет использовано сообщение из очереди, соответствующее сообщению клиента Perl из предыдущего шага.
Таким образом, выходные данные будут доступны в базе данных, и асинхронный поток будет завершен.
- Возможно ли таким образом разделить приложения, совместимые с RabbitMQ?
- Есть ли лучшие способы сделать это?
- Пожалуйста, предложите некоторые компоненты фреймворка для RabbitMQ и Perl.
Цените свой вклад в это.