Подход к обрабатывать долгоживущие процессы с помощью Camel

Я работаю над PoC для небольшого движка процессов на основе Camel. Требования заключаются в том, чтобы иметь возможность выполнять набор последовательных шагов, и выполнение каждого из них потенциально может занять несколько часов. Асинхронный стиль связи - очевидный выбор в этом случае, но мне трудно получить правильную часть «процесса».

При отправке сообщения внешней системе мне нужно дождаться завершения. Поскольку это может занять много времени, я думаю об остановке обработки конкретного шага после отправки сообщения, а затем о запуске нового «задания» после получения сообщения о завершении. Таким образом, буквально обработка каждого шага будет осуществляться как маршрут Camel, начинающийся с той же очереди JMS, а затем маршрутизатор на основе содержимого будет решать, какая конкретная логика должна выполняться на основе заголовков сообщения или его содержимого.

Проблема, однако, в том, что как избежать потери сообщений. Например, на конкретном этапе я отправляю сообщение и прекращаю обработку. Внешняя система по какой-то причине не обработала сообщение, поэтому моя система не получает никаких уведомлений. Это означает, что процесс застревает, если какой-либо другой компонент не сгенерирует сообщение для его пробуждения.

Кроме того, пока система может быть отключена в любой момент времени, я должен встроить логику для продолжения обработки сообщений после перезапуска (что подразумевает некую стратегию сохранения, повторной доставки и управления транзакциями).

Все это проблемы Таким образом, я хотел бы попросить опытных чемпионов Camel дать предложения о том, как разработать такую ​​логику с помощью Camel. Я знаю, что специализированный продукт BPM или ESB могут решить эту проблему намного проще, но я не хочу раздувать решение.

Приветствуются любые советы, особенно в отношении возможностей Camel, которые могут помочь в упрощении решения.

5
задан oiavorskyi 29 May 2011 в 10:38
поделиться