Добавление задержки к маршруту Camel приводит к превышению времени ожидания Atomikos - PullRequest
0 голосов
/ 10 января 2020

У меня есть верблюжий маршрут, который слушает ActiveMQ. Я добавил задержку в 10 секунд, потому что нужно быть уверенным, что другой процесс завершился до начала. Это было достигнуто путем добавления атрибута задержки: -

<camel:route id="packageRetrievalContentAndSendToS3" delayer="10000">
    <camel:from uri="activemq:{{ccs.activemq.queue.prefix}}.sr.package.and.send"/>

    ....extra steps....

</camel:route>

Это работает нормально, но проблема в том, что мой маршрут сейчас истек! Сообщение ниже.

Atomikos:8] c.a.icatch.imp.ActiveStateHandler        : Timeout/setRollbackOnly of ACTIVE coordinator !

Буду очень признателен за любой совет, как решить эту проблему. В идеале я хотел бы увеличить время ожидания на этом маршруте. Большое спасибо

1 Ответ

2 голосов
/ 10 января 2020

Как уже заметил @ sergei-petunin, вы пытаетесь компенсировать проблему дизайна, ожидая .

Ваш маршрут не должен получать сообщение до того, как закончится ожидаемая вещь . Это означает, что

  1. то, что вы ждете, получает сообщение и делает то, что должно сделать
  2. , затем отправляет сообщение на ваш маршрут
  3. тогда ваш маршрут обрабатывает сообщение без ожидания

Таким образом, все частичные шаги процесса выполняются асинхронно и последовательно, потому что они зависят друг от друга . Это также известно как Трубы и фильтры EIP .

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

...