我正在使用带有spring boot和camel-config.xml文件的Apache Camel。 我创建了一个每秒运行的简单路由并运行一个类方法:
<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 非常感谢任何帮助:)
答案 0 :(得分:0)
我无法找到修改失火指令的方法,但我找到了解决方法。
我没有使用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();
}
}
}