2017-07-12 1 views
0

Während ich meine Camel-Anwendung debugging, erkannte ich, dass das anmutige Herunterfahren einer Route ignoriert die ausstehenden Aufgaben, die von wireTap() ausgelöst wurden.Apache Camel: wireTap und graceful shutdown

Wenn ich eine Routendefinition wie diese:

from("direct:start") 
    .wireTap("bean:myWireTapBean") 
    .to("mock:result"); 

und ich einen Debug-Haltepunkt in myWireTapBean (dh die asynchrone Verarbeitung von Wiretap aussetzen), dann ein CamelContext.stopRoute(routeId) Aufruf erzeugt die folgenden Protokollmeldungen:

11:36:12.352 [Thread-1] INFO o.a.camel.spring.SpringCamelContext - Apache Camel 2.19.1 (CamelContext: camel-1) is shutting down 
11:36:12.352 [Thread-1] INFO o.a.c.impl.DefaultShutdownStrategy - Starting to graceful shutdown 1 routes (timeout 300 seconds) 
11:36:12.352 [Camel (camel-1) thread #6 - ShutdownTask] INFO o.a.c.impl.DefaultShutdownStrategy - Route: route1 shutdown complete, was consuming from: direct://myRoute 
11:36:12.352 [Thread-1] INFO o.a.c.impl.DefaultShutdownStrategy - Graceful shutdown of 1 routes completed in 0 seconds 
11:36:12.478 [Thread-1] WARN o.a.c.impl.DefaultInflightRepository - Shutting down while there are still 1 inflight exchanges. 
11:36:12.478 [Thread-1] INFO o.a.camel.spring.SpringCamelContext - Apache Camel 2.19.1 (CamelContext: camel-1) uptime 1.411 seconds 
11:36:12.478 [Thread-1] INFO o.a.camel.spring.SpringCamelContext - Apache Camel 2.19.1 (CamelContext: camel-1) is shutdown in 0.126 seconds 

Gibt es eine Möglichkeit zu verhindern, dass Camel heruntergefahren wird, während es noch Inflight Exchange in der DefaultInflightRepository gibt, die von wireTap erstellt wurde? Ich habe die FAQ: How can I stop a route from a route bereits gelesen, aber das scheint keine Antwort auf diese Frage zu sein.

+0

Sie können eine direkte Route für das Abhören verwenden, dann gibt es Flugmeldungen auf dieser Route. –

Antwort

1

Ja nicht nehmen die aktuelle Implementierung von WireTap aktive Aufgaben, wenn sie nicht weitergeleitet werden.

angemeldet ich ein Ticket, Unterstützung für Abschaltung des WireTap EIP aufzuschieben, wenn es während des Fluges Aufgaben: https://issues.apache.org/jira/browse/CAMEL-11539

Die Abhilfe ist eine Route wie direct zu erstellen und dann diesen Weg nennen, wo Sie dann der Anruf bean, dann, wenn Sie Camel herunterfahren, wird die Route direct einen Austausch haben und deshalb warten, bis sie abgeschlossen ist.

0

Das Standardverhalten von DefaultShutdownStrategy ist das Beenden von Routen-Shutdowns. Es ist also eines dieser Dinge, wo der Standard für viele Szenarien funktioniert, aber nicht für alle und Sie befinden sich in letzterem Fall. Wenn der Austausch innerhalb einer Transaktion ausgeführt wird, wird ein Rollback durchgeführt. Sie können sich das Sourcing aus einer JMS-Warteschlange oder einer anderen JMS-Warteschlange anschauen, sodass Sie die Verarbeitung rückgängig machen und fortsetzen können.

Die Javadocs haben gute Informationen über das Verhalten und die verschiedenen Optionen, die Sie die DefaultShutdownStrategy zu konfigurieren, bevor man bedenkt das Schreiben eines benutzerdefinierten man verwenden kann: in Rechnung

DefaultShutdownStrategy