如何强制停止Apache Camel交换?

时间:2018-06-19 14:32:03

标签: apache-camel

我正在使用camel-exec组件执行一些外部过程。

这些可能会长期运行(或出于任何商业原因),我希望能够根据某些标头值杀死

到目前为止,一切都很好。我可以过滤要删除的交换,将交换标记为e.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);,然后将其从InfightRepository中删除。

但是我需要强行停止当前任务的执行,并停止进一步路由的交换。

您会提出什么建议?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我为解决此问题所做的工作如下:

  • 创建了两个缓存execCommandCache<aKey, org.apache.camel.component.exec.ExecCommand>processCache<org.apache.camel.component.exec.ExecCommand, java.lang.Process>。每当启动新的可执行文件时,我都会将其添加到这些缓存中。

  • 当我需要取消可执行文件时,我正在浏览InflightRepository并在aKey Exchange标头上进行过滤。然后,我从ExecCommand中检索execCommandCache,并由此可以从Process中找到实际的processCache

  • 最后,我正在使用Zeroturnaround zt-process-killer杀死Process。并标记通过exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);

    完成的交换
    ProcessUtil.destroyGracefullyOrForcefullyAndWait(process, 5, TimeUnit.SECONDS, 5, TimeUnit.SECONDS);
    

不是很干净,但是可以解决问题。希望对您有所帮助。