我有多个线程在骆驼上下文中运行。每个线程都在积累数据。我无法在骆驼环境中停止路线。这是我的代码:
public void stopThread(String routeId, CamelContext context) {
System.out.println("Stop status: " + context.stopRoute("thread1", 30, TimeUnit.SECONDS, false));
System.out.println("Remove status: " + context.removeRoute("thread1"));
}
我还尝试了以下方法:
public void stopThread(String routeId, CamelContext context) {
context.stopRoute("thread1");
System.out.println("Remove status: " + context.removeRoute("thread1"));
}
输出:
Stop status: false
Remove status: false
我看到线程正在积累数据。我不知道如何以编程方式实现这一目标。我正在使用骆驼2.16.2。任何帮助,将不胜感激。
当我停止并启动骆驼上下文时,它工作正常:
context.stop();
context.start();
我在具有多个线程的 Apache Camel 4.3.0 上遇到了同样的问题。
删除状态给了我:
false
。我尝试调试它并通过 id 获取路线,它起作用了:
getContext().getRoute("MyRouteId")
成功给了我返回的路线。
检查上下文后:
getContext().getRoute("MyRouteId").getCamelContext()
它似乎与我要删除的位置相同,否则这将不起作用。
只需删除它
getContext().removeRoute(getContext().getRoute("[2] Test").getId())
似乎不起作用。
无论如何,我发现我需要提前停止路线从相同的上下文(https://github.com/apache/camel/blob/main/core/camel-api/src/main/java/ org/apache/camel/CamelContext.java 如 JavaDocs 中所述)。
getContext().getRouteController().stopRoute("MyRouteId");
后来我能够将其删除。
如果您仍然遇到困难,请重复这些步骤。
希望有帮助。 亲切的问候!