Я использую Apache Camel с весенней загрузкой и файлом camel-config.xml. Я создал простой маршрут, который запускается каждую секунду и запускает метод класса:
<camelContext xmlns = "http://camel.apache.org/schema/spring" id = "myContext" trace = "true" streamCache = "true" useMDCLogging = "true">
<route id = "testCron">
<from uri = "quartz2://TestCron?cron=0/1 * * * * ?" />
<to uri = "bean:folder.MyClass?method=test" />
</route>
</camelContext>
У класса просто есть счетчик int, который увеличивается и отображается:
package folder;
public class MyClass {
private static int count = 0;
public static void test(Exchange exchange) throws Exception {
count = count + 1;
System.out.println(count);
}
}
У меня есть еще один фрагмент кода (не имеющий отношения к показу), который может запускать и останавливать указанный выше маршрут. Проблема, с которой я сталкиваюсь, заключается в том, чтобы остановить маршрут, подождать 5 секунд и запустить его снова.
Вместо того, чтобы продолжить с того места, где он оставил счетчик, он перехватывает каждую итерацию, которую не выполнял, пока маршрут был остановлен.
Я много читал, пытаясь решить эту проблему. Я узнал следующее:
Что пробовал безуспешно:
У меня совсем нет вариантов: x Буду признателен за любую помощь :)




Мне не удалось найти способ изменить инструкции по пропуску зажигания, но я нашел обходной путь.
Вместо остановки маршрута с помощью context.stopRoute (routeId) я теперь останавливаю конечную точку:
public static void stopRoute(Exchange exchange) throws Exception {
String beanId = (String) exchange.getIn().getHeader("beanId");
String routeId = (String) exchange.getIn().getHeader("routeId");
SpringCamelContext context = (SpringCamelContext) exchange.getContext().getRegistry().lookupByName(beanId);
for (Route route : context.getRoutes()) {
if (route.getId().equals(routeId)) {
route.getEndpoint().stop();
}
}
}