2016-07-19 8 views
0

Ich habe eine Camel-Route, die so aussieht wie die folgende. Wenn alle Datensätze erfolgreich analysiert wurden, erhalte ich eine E-Mail vom onCompletion-Schritt. Wenn ein Datensatz eine Ausnahme erhält, wird der Rest der Datensätze verarbeitet, was in Ordnung ist, aber der onCompletion-Schritt wird nicht ausgelöst.Apache Camel Route: onCompletion nicht erreicht, wenn eine Ausnahme auftritt?

Was ich möchte, ist für den onCompletion-Schritt ausgeführt werden, auch wenn es Fehler gibt und in der Lage sein, eine Nachricht zu senden "Route mit Fehlern abgeschlossen". Wie kann ich das machen?

 <route id="route1"> 
      <from uri="file://C:/TEMP/load?noop=true&amp;idempotentRepository=#sysoutStore&amp;sorter=#externalDataFilesSorter"/> 
      <choice> 
       <when> 
        <simple>${file:name} regex '*file.*.(txt)'</simple> 
        <to uri="direct:RouteFile" /> 
       </when> 
      </choice>  
     </route> 

     <route id="testRouteDirect"> 
      <from uri="direct:RouteFile" /> 
       <onException> 
        <exception>java.lang.IllegalArgumentException</exception> 
        <redeliveryPolicy maximumRedeliveries="1" /> 
        <handled> 
         <constant>true</constant> 
        </handled> 
        <to uri="log:java.lang.IllegalArgumentException"></to> 
       </onException> 
       <onException> 
        <exception>java.text.ParseException</exception> 
        <redeliveryPolicy maximumRedeliveries="1" /> 
        <handled> 
         <constant>true</constant> 
        </handled> 
        <to uri="log:java.text.ParseException"></to> 
       </onException> 
       <split parallelProcessing="false" strategyRef="exchangePropertiesAggregatorStrategy" > 
        <tokenize token="\r\n"/> 
        <to uri="log:Record"></to> 
       </split> 
       <onCompletion> 
        <to uri="log:completion"></to> 
        <to uri="smtp://mail.com?contentType=text/html&amp;[email protected]&amp;[email protected]&amp;subject=we're done" /> 
       </onCompletion> 
     </route> 
+0

Den Verarbeitungsteil in doTry() und doCatch() umgeben. Die Datensätze, die fehlgeschlagen sind, werden abgefangen und Sie können entscheiden, ob Sie sie protokollieren oder etwas anderes mit ihnen machen möchten. Die Route wird weiter verarbeitet, sodass sie die OnCompletion auslösen sollte. –

+0

Die 'onCompletion' sollte unabhängig von einer Ausnahme ausgelöst werden. Vielleicht tritt vor dem cbr-Block in der ersten Route eine Ausnahme auf? –

Antwort

0

Es gibt eine Reihe von Tickets im Zusammenhang mit der Unvollständigkeit auf der Kamelseite: Camel Jira URL. Ich aktualisierte zu einer neueren Version von Kamel & Ich bekomme dieses Problem nicht mehr.

1

Der beste Teil Ihrer Route ist, Sie haben onException innerhalb Ihrer Route mit behandelt = wahr. Also verschiebe deine onCompletion auf die übergeordnete Route (route1), es sollte funktionieren!

Verwandte Themen