2017-01-16 8 views
2

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 ...

wird bearbeitet

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?

+1

Haben Sie diese Seite https://camel.apache.org/how-can-i-stop-a-route-from-a-route.html gesehen? – ltsallas

+0

@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

+0

Verwenden Sie http://camel.apache.org/graceful-shutdown.html aber setzen Sie das Timeout auf 0 oder nur 1-2 Sekunden. –

Antwort

1

Können Sie einen Austausch erhalten? Ich verwende exchange.setProperty(Exchange.ROUTE_STOP, true); Route Stop Flow und geht nicht zur nächsten Route.

+0

Hey Freund, danke für die Antwort Wie ich geschrieben habe in meiner Frage habe ich es schon mit der 'ROUTE_STOP' Eigenschaft versucht, aber das hat nicht funktioniert.Ich habe es noch nicht im neuen Karaf/Camel versucht, vielleicht funktioniert das jetzt dort. – maxdev

Verwandte Themen