Во время обработки обмена, полученного от JMS, я динамически создаю маршрут, который извлекает файл с 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);
}
};
}
Я Использую поток для остановки маршрута из route, что является подходом, рекомендованным в документации Camel - Как я могу остановить маршрут из маршрута
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я вижу, что поток, соответствующий маршруту, не удаляется. Таким образом, со временем эти заброшенныетреды просто продолжают накапливаться.
Есть ли способ правильно остановить/удалить маршрут динамически/программно, а также освободить поток маршрута, чтобы они не накапливались со временем?