我正在使用camel-exec
组件执行一些外部过程。
这些可能会长期运行(或出于任何商业原因),我希望能够根据某些标头值杀死。
到目前为止,一切都很好。我可以过滤要删除的交换,将交换标记为e.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
,然后将其从InfightRepository
中删除。
但是我需要强行停止当前任务的执行,并停止进一步路由的交换。
您会提出什么建议?有什么想法吗?
答案 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);
不是很干净,但是可以解决问题。希望对您有所帮助。