停止并从骆驼上下文中删除路线

问题描述 投票:0回答:1

我有多个线程在骆驼上下文中运行。每个线程都在积累数据。我无法在骆驼环境中停止路线。这是我的代码:

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();
java apache-camel osgi karaf
1个回答
0
投票

我在具有多个线程的 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");

后来我能够将其删除。

如果您仍然遇到困难,请重复这些步骤。

  1. 检查上下文中该路由是否可用
  2. 停止它,如果还没有完成的话
  3. 删除它

希望有帮助。 亲切的问候!

© www.soinside.com 2019 - 2024. All rights reserved.