2013-06-27 19 views
7

Was zwischen den Unterschied ist:Apache Camel: errorHandler vs onException?

<camel:errorHandler id="deadLetterErrorHandler" type="DeadLetterChannel" 
     deadLetterUri="log:dead"> 

<camel:camelContext errorHandlerRef="deadLetterErrorHandler"> 
    ... 
</camel:camelContext> 

Und:

<onException> 
    ... 
</onException> 

Nach this article, indem sie beide in Verbindung ist eine "starke Kombination". Wie das? Welche Rollen nehmen sie jeweils an und wie ergänzen sie sich?

Antwort

13

Die errorHandler wird verwendet, um alle nicht abgefangenen Exception zu behandeln, die während des Routings und der Verarbeitung einer Nachricht ausgelöst werden. Umgekehrt wird onException verwendet, um spezifische Exception Typen zu behandeln, wenn sie ausgelöst werden. Schauen Sie sich this article an, um zu sehen, wie man onException benutzt.

+0

Also, wenn ich 'onException (Throwable.class) 'schreibe, habe ich im Grunde den' errorHandler' implementiert? – DavidS

1

Wenn die Aktion, die Sie für jeden Ausnahmetyp ausführen müssen, anders ist, verwenden Sie onException. Sie können die Fehlerbehandlung ausnahmsweise definieren.

onException(xxxException.class).to("activemq:xxxFailed"); onException(yyyException.class).to("activemq:yyyFailed");

Wenn Sie nur einen generischen Handler, mit errorhandler gehen. Für alle Arten von Fehlern wird die gleiche Verarbeitung durchgeführt.