gpt4 book ai didi

apache-camel - 以动态/编程方式停止/删除路由不会删除相应的线程

转载 作者:行者123 更新时间:2023-12-04 12:23:41 24 4
gpt4 key购买 nike

在处理从 JMS 收到的 Exchange 期间,我正在动态创建一个路由,该路由从 FTP 获取文件到文件系统,当批处理完成时,我需要删除相同的路由。下面的代码片段展示了我是如何做到这一点的:

public void execute() {
try {
context.addRoutes(createFetchIndexRoute(routeId()));
} catch (Exception e) {
throw Throwables.propagate(e);
}
}

private RouteBuilder createFetchIndexRoute(final String routeId) {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("ftp://" + getRemoteQuarterDirectory() +
"?fileName=" + location.getFileName() +
"&binary=true" +
"&localWorkDirectory=" + localWorkDirectory)
.to("file://" + getLocalQuarterDirectory())
.process(new Processor() {
RouteTerminator terminator;

@Override
public void process(Exchange exchange) throws Exception {
if (camelBatchComplete(exchange)) {
terminator = new RouteTerminator(routeId,
exchange.getContext());
terminator.start();
}
}
})
.routeId(routeId);
}
};
}

我是 使用线程停止路由 ,这是 Camel 文档中推荐的方法 - How can I stop a route from a route

public class RouteTerminator extends Thread {
private String routeId;
private CamelContext camelContext;

public RouteTerminator(String routeId, CamelContext camelContext) {
this.routeId = routeId;
this.camelContext = camelContext;
}

@Override
public void run() {
try {
camelContext.stopRoute(routeId);
camelContext.removeRoute(routeId);
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
}

结果路线确实停止了。但是我在 中看到的jconsole 是与路由对应的线程没有被删除。因此,这些废弃的线程会随着时间的推移不断积累。

有没有办法以动态/编程方式正确停止/删除路由,并释放路由的线程,这样它们就不会随着时间的推移而累积?

最佳答案

这在下一个 Camel 版本 2.9.2 和 2.10 中得到修复。由这张票修正:
https://issues.apache.org/jira/browse/CAMEL-5072

关于apache-camel - 以动态/编程方式停止/删除路由不会删除相应的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com