Стратегия использования верблюда и системы источника / цели
Я новичок в Camel и ищу шаблоны или стратегии для управления доступностью целевой системы на маршруте Camel.
Например, скажем, я хочу: - прочитать входные данные с файлового сервера - обработать данные (data -> targetData) - отправить целевые данные (TargetData) на целевой веб-сайт, используя службы Rest (назовите его TargetSystem)
Мой вопрос: какова лучшая стратегия, если TargetSytem не работает?
Я понимаю, что в случае сбоя маршрута можно выполнить откат всего процесса. Но в случае, если TargetSystem является внешней системой и может работать несколько часов, я не думаю, что попытка откатить процесс до тех пор, пока целевая система не будет запущена, является хорошим подходом.
Есть ли какая-либо модель или стратегия, которая хорошо подходит для этой проблемы?
С уважением
жилль
1 ответ
Это шаблон, который я использую с несколькими системами.
- Сохраните ваши TargetData где-нибудь (таблица базы данных, очередь JMS, Redis, ...)
- Создайте маршрут, который читает неотправленные данные TargetData и отправляет их в TargetSystem.
- Если передача в порядке, пометьте TargetData соответствующим образом (например: установить флаг в строке таблицы, удалить из очереди и т. Д.)
- Периодически запускайте такой маршрут из таймера и / или других маршрутов. Вы даже можете запустить его с помощью команды оболочки, чтобы вручную "принудительно" повторно отправить неотправленные данные.
Вы можете настроить это в соответствии со своими потребностями и, например, добавить ведение журнала, где это необходимо, вести учет в таблице БД, когда происходит каждая предварительная отправка, сколько раз она не удалась, сколько повторов и т. Д....
Теперь вы можете модулировать свое приложение в 2 модуля: один, который получает данные и обрабатывает их в TargetData, а другой управляет передачей TargetData в TargetSystem.
Модуль может означать 2 CamelContextes, 2 пакета OSGi, 2 полностью отдельных Java-приложения.