Wir haben eine Datenverarbeitungsanwendung, die auf Karaf 2.4.3 mit Camel 2.15.3 ausgeführt wird.Eine Camel-Route von außerhalb der Route stoppen
In dieser Anwendung haben wir eine Reihe von Routen, die Daten importieren. Wir haben eine Management-Ansicht, die diese Routen auflistet und wo jede Route gestartet werden kann. Diese Routen importieren nicht direkt Daten, sondern rufen andere Routen (einige von ihnen in anderen Bündeln, die über direct-vm
aufgerufen werden) manchmal direkt und manchmal in einem Splitter auf.
Gibt es eine Möglichkeit, eine Route auch komplett zu stoppen/damit die gesamte Börse nicht weiter bearbeitet wird?
Wenn einfach die stopRoute
Funktion wie folgt verwendet:
route.getRouteContext().getCamelContext().stopRoute(route.getId());
ich schließlich eine Erfolgsmeldung mit Graceful shutdown of 1 routes completed in 10 seconds
bekommen - der Austausch noch though ...
Also habe ich versucht, das Verhalten zu imitieren die StopProcessor
durch die Stop-Eigenschaft, aber das hilft auch nicht:
public void stopRoute(Route route) {
try {
Collection<InflightExchange> browse = route.getRouteContext().getCamelContext().getInflightRepository()
.browse();
for (InflightExchange inflightExchange : browse) {
String exchangeRouteId = inflightExchange.getRouteId();
if ((exchangeRouteId != null) && exchangeRouteId.equals(route.getId())) {
this.stopExchange(inflightExchange.getExchange());
}
}
} catch (Exception e) {
Notification.show("Error while trying to stop route", Type.ERROR_MESSAGE);
LOGGER.error(e, e);
}
}
public void stopExchange(Exchange exchange) throws Exception {
AsyncProcessorHelper.process(new AsyncProcessor() {
@Override
public void process(Exchange exchange) throws Exception {
AsyncProcessorHelper.process(this, exchange);
}
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);
callback.done(true);
return true;
}
}, exchange);
}
gibt es ein Möglichkeit, einen Austausch von außerhalb der Route vollständig zu stoppen?
Haben Sie diese Seite https://camel.apache.org/how-can-i-stop-a-route-from-a-route.html gesehen? – ltsallas
@Itsallas Ich habe es gesehen, aber es sagt, dass Sie die 'stopRoute' Funktion verwenden sollten, die aus irgendeinem Grund den Austausch von der weiteren Verarbeitung nicht stoppt – maxdev
Verwenden Sie http://camel.apache.org/graceful-shutdown.html aber setzen Sie das Timeout auf 0 oder nur 1-2 Sekunden. –