Apache camel 动态/以编程方式停止/删除路由';t拆下相应的螺纹

Apache camel 动态/以编程方式停止/删除路由';t拆下相应的螺纹,apache-camel,Apache Camel,在处理从JMS接收到的交换过程中,我动态地创建一个路由,将文件从FTP提取到文件系统,当批处理完成时,我需要删除相同的路由。以下代码片段显示了我是如何做到这一点的: public void execute(){ 试一试{ addRoutes(createFetchIndexRoute(routeId()); }捕获(例外e){ 抛掷物。传播(e); } } 专用RouteBuilder createFetchIndexRoute(最终字符串routeId){ 返回新的RouteBuilder()

在处理从JMS接收到的交换过程中,我动态地创建一个路由,将文件从FTP提取到文件系统,当批处理完成时,我需要删除相同的路由。以下代码片段显示了我是如何做到这一点的:

public void execute(){
试一试{
addRoutes(createFetchIndexRoute(routeId());
}捕获(例外e){
抛掷物。传播(e);
}
}
专用RouteBuilder createFetchIndexRoute(最终字符串routeId){
返回新的RouteBuilder(){
@凌驾
public void configure()引发异常{
从(“ftp://”+getRemoteQuarterDirectory()+
“?fileName=“+location.getFileName()+
“&binary=true”+
“&localWorkDirectory=“+localWorkDirectory)
.to(“文件:/”+getLocalQuarterDirectory())
.进程(新处理器(){
路由终结器;
@凌驾
公共作废进程(Exchange)引发异常{
如果(完成(交换)){
终止符=新路由终止符(routeId,
exchange.getContext());
terminator.start();
}
}
})
.routeId(routeId);
}
};
}
我正在使用线程从路由停止路由,这是Camel文档中推荐的一种方法-

公共类RouteTerminator扩展线程{
私有字符串路由ID;
私人背景;
公共RouteTerminator(字符串routeId、CamelContext和CamelContext){
this.routeId=routeId;
this.camelContext=camelContext;
}
@凌驾
公开募捐{
试一试{
camelContext.stopRoute(routeId);
camelContext.removoute(routeId);
}捕获(例外e){
抛掷物。传播(e);
}
}
}
结果,路线确实停了下来。但是我在jconsole中看到的是,与路由对应的线程没有被删除。因此,随着时间的推移,这些被抛弃的线索不断积累


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

这在下一个Camel版本2.9.2和2.10中固定。根据这张票确定:

切换到2.9.2-SNAPSHOT。现在,活动线程的数量保持稳定,不再像以前那样累积。