Подход для обработки долгоживущих процессов с Camel - PullRequest
5 голосов
/ 29 мая 2011

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

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

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

2 голосов
/ 02 июня 2011

Поддержка Camel BAM должна предоставить вам некоторые из долгоживущих процессов (тайм-ауты, сценарии обработки ошибок и т. Д.).Кроме того, JMS и транзакции помогут с надежными / постоянными требованиями к обмену сообщениями и т. Д.

удачи и дадут нам знать, если вы выберете альтернативный подход ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...