Мне нужно создать маршрут, который периодически вызывает некоторый процесс с небольшой задержкой между итерациями.Бесконечный цикл в Apache Camel
Когда я смотрю на документацию для зацикливания:
The Loop позволяет обработку сообщения несколько раз, возможно, по-другому для каждой итерации. Полезен в основном во время тестирования.
Так что это не полезно для меня, так как мне нужно сделать бесконечный цикл (без явно заданного CamelLoopSize
).
Моя вторая идея использования своего рода «рекурсии»:
from("direct:updateLoop").routeId("updateLoop")
.process(someProcess)
...
.filter(someFilter) // Can be used to stop the workflow
.delay(18000000) // Wait 5 hours and start again
.to("direct:updateLoop")
Это хорошо работает в течение нескольких дней, однако после того, как около 600 итераций, это не удается с StackOverflowException
Есть ли лучший способ запустить мой процесс в бесконечном цикле?
Почему бы не использовать компонент кварца или таймера? –
Потому что я не могу заранее определить, сколько времени займет процесс. Процесс может занять несколько минут или несколько дней. Когда я настраиваю только таймер, будет возможность одновременной обработки одного и того же набора данных. Настройка задержки просто подходит для моего варианта использования. – Peter
Как насчет опроса потребительского рисунка? – vikingsteve