Arrêter/Supprimer un Itinéraire de façon dynamique/par programme N'est pas Supprimer le Thread Correspondant
Lors du traitement d'un Échange de reçus de JMS je crée dynamiquement un itinéraire qui récupère un fichier à partir d'un FTP pour les fichiers système et lorsque le traitement est fait j'ai besoin d'enlever cette même route. Le fragment de code suivant montre comment je fais ceci:
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);
}
};
}
Je suis à l'Aide d'un fil à arrêter un itinéraire à partir d'un itinéraire, qui est une approche recommandée dans le Chameau de la Documentation - Comment puis-je arrêter un itinéraire à partir d'un itinéraire
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);
}
}
}
En conséquence, la route s'arrête. Mais ce que je vois dans le jconsole est que le thread qui correspond à l'itinéraire n'est pas supprimé. Ainsi, dans le temps, ces abandonné fils juste s'accumulent.
Est-il un moyen de bien arrêter/supprimer un itinéraire de façon dynamique/par programme et aussi pour libérer la route du fil, de sorte qu'ils ne doivent pas s'accumuler dans le temps?
OriginalL'auteur Vladimir Tsvetkov | 2012-04-09
Vous devez vous connecter pour publier un commentaire.
C'est corrigé dans la prochaine Chameau version 2.9.2 et 2.10. Fixées par le présent billet:
https://issues.apache.org/jira/browse/CAMEL-5072
OriginalL'auteur Claus Ibsen