2017-06-28 5 views
0

Ich mag würde diese Logik in einer Apache Camel Java-Anwendung entschlüsseln: ReadFromActiveMq Dateien und sende sie Route Direct Während existsFilesInFolder { retrytoLoadThemForever() // obwohl Fehler zu lenken erscheint -> manuelle Aktion erforderlich } DirectRoute-Nachrichten verbrauchen.eine Apache Camel Route eines Ordnerinhaltes abhängig Suspending

in Java Ich habe dies gemacht:

onManualDataReceivedException().maximumRedeliveries(-1) 

from("file:" + recoverableErrorsFolder +"?noop=true").to("bean:processManualFilesDatabean"); 
//If there is an error in manual process i throw ManualDataReceivedException 

from ("direct:DirectRoute") 
     .to("bean:processDirectQueueBean"); 

private OnExceptionDefinition onManualDataReceivedException() { 
    return onException(ManualDataReceivedException.class); 
} 

Wie kann ich direkt Pause: Verbrauch Direct wenn Dateien in recoverableErrorsFolder Ordner?

Antwort

1

Sie können die Komponente ControlBus zum Starten/Stoppen von Routen zur Laufzeit mit ihrer routeId verwenden.

Dieses Beispiel zeigt, wie eine Route während der Verarbeitung einer Datei gestoppt und nach der Verarbeitung neu gestartet wird. Sie können starten Aktion zu onCompletion Callbacks und implementieren eine robustere Logik.

from("direct:DirectRoute") 
    .routeId("DR")  
    .to("bean:processDirectQueueBean"); 

from("file:" + recoverableErrorsFolder +"?noop=true") 
    .to("controlbus:route?routeId=DR&action=stop") 
    .to("bean:processManualFilesDatabean") 
    .to("controlbus:route?routeId=DR&action=start"); 
+0

Das hat funktioniert. Danke – user4919313