Я работаю над PoC для небольшого процесса на базе Camel.Требования должны иметь возможность выполнять множество последовательных шагов, и каждый из них может занять несколько часов.Стиль асинхронной связи является очевидным выбором в этом случае, но я борюсь за то, чтобы правильно обработать часть процесса.
При отправке сообщения во внешнюю систему мне нужно дождаться завершения.Поскольку это может занять много времени, я думаю о том, чтобы прекратить обработку конкретного шага после отправки сообщения, а затем начать новую «работу» после получения сообщения о завершении.Таким образом, буквально обработка каждого шага будет обрабатываться как маршрут Camel, начинающийся с той же очереди JMS, и затем маршрутизатор на основе содержимого решит, какую конкретную логику следует выполнить на основе заголовков сообщения или его содержимого.
Проблема,Однако, как избежать потери сообщений.Например, на конкретном этапе я отправляю сообщение и прекращаю обработку.Внешняя система по какой-то причине не обработала сообщение, поэтому моя система не получает никаких уведомлений.Это означает, что процесс застрял, если какой-либо другой компонент не сгенерирует сообщение, чтобы его разбудить.
Кроме того, до тех пор, пока система может быть отключена в любой момент времени, мне нужно встроить логику, чтобы продолжить обработку сообщений после перезагрузкичто подразумевает некоторую устойчивость сообщений, повторную доставку и управление транзакциями).
Все эти проблемы складываются, поэтому я хотел бы попросить опытных чемпионов Camel предоставить предложения о том, как разработать такую логику с использованием Camel.Я знаю, что специализированный BPM-продукт или ESB мог бы решить эту проблему намного проще, но я не хочу раздувать решение.
Любые советы приветствуются, особенно с точки зрения возможностей Camel, которые могут помочь в упрощении решения.,