apache-camel - 如何强制停止 Apache Camel 交换?
问题描述
我正在使用camel-exec
组件执行一些外部进程。
这些可能会长期运行(或出于任何商业原因),我希望能够根据某些标头值杀死一些 inflightExchanges。
到目前为止,一切都很好。我可以过滤我想杀死的交换,我用 . 标记交换e.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
并将其从InfightRepository
.
但我需要的是强制停止当前任务的执行,并阻止交换进一步路由。
你会提出什么建议?有任何想法吗?
解决方案
我为解决它所做的如下:
创建了两个缓存 an
execCommandCache<aKey, org.apache.camel.component.exec.ExecCommand>
和 aprocessCache<org.apache.camel.component.exec.ExecCommand, java.lang.Process>
。每当启动一个新的可执行文件时,我都会将它添加到这些缓存中。当我需要取消可执行文件时,我正在浏览 InflightRepository 并过滤
aKey
Exchange 标头。然后我ExecCommand
从execCommandCache
and 中检索 并且通过这个我可以找到实际Process
的 fromprocessCache
。最后我使用 Zeroturnaround
zt-process-killer
来杀死Process
. 并通过以下方式将交换标记为已完成exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
ProcessUtil.destroyGracefullyOrForcefullyAndWait(process, 5, TimeUnit.SECONDS, 5, TimeUnit.SECONDS);
它不是很干净,但可以解决问题。希望能帮助到你。
推荐阅读
- reactjs - 使用 React 和 twin.macro/emotion/styled-components 开发时更快的渲染
- javascript - 我无法在 React 的 img 标签的 src 属性中使用数组元素
- codenameone - 在 NetBeans 中安装 Codename One 插件时出现问题
- sqlpackage - Azure 上的 SQLPackage 和 DB
- swift - sectionHeaderTopPadding 不适用于 Grouped 和 InsetGrouped UITableView
- amazon-web-services - AWS SSO 自定义应用程序 SAML 身份验证错误(InvalidIdentityToken、Invalid Base64 SAMLResponse
- html - 子元素不与可滚动父元素重叠
- vba - Visio VBA 将形状的“开始”和“结束”作为与水平标尺相关的值返回
- sql - 显示访问 SQL 中的所有重复行
- facebook - 在 Facebook 上停用应用程序后,我提交了上诉。多久?