2015-02-20 4 views
0

У меня есть маршрут верблюда, чтобы использовать сообщение из темы JMS. Когда маршрут начинается, и в теме нет сообщения, я хочу создать исключение и остановить процесс.Apache Camel JmsComponent - Как проверить, есть ли сообщение в теме?

Я использую JmsComponent от Apache Camel, использующего DefaultMessageListenerContainer с Spring и определяется как транзакционный. Текущее поведение заключается в том, что маршрут начинается, но он продолжает ждать сообщения бесконечно.

Есть ли решение проверить, существует ли сообщение, и просто остановить маршрут при его отсутствии?

ответ

0

Необходимо определить срок, на который вы ожидаете сообщения, и сделать вывод о том, что все пошло не так.

Затем вы используете агрегатор с таймаутом завершения (скажем) 30 секунд.

Таким образом, если вы проедете более 30 секунд без получения сообщения по этой теме, вы можете принять любое действие, которое вам нравится.

from("mq:topic:xyz") 
    .aggregate(constant(true), new TakeLastAggregationStrategy()) 
    .completionTimeout(30000) 
    .to("direct:raiseException") 
+0

Спасибо за ваш ответ! Я тестировал ваше решение, но маршрут никогда не доходил до совокупности. Он остается ждать сообщения с шага. Любая другая идея? –

+0

А, ок. Мы используем это для отслеживания отключения в простом механизме сердцебиения. Но мы всегда полагаемся на получение хотя бы одного сообщения. После этого перерыв в потоке сообщений в 30 секунд инициирует исключение с помощью приведенного выше кода. – vikingsteve

Смежные вопросы