2013-06-27 18 views
7

Qual è la differenza tra:Apache Camel: errorHandler vs onException?

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

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

E:

<onException> 
    ... 
</onException> 

Secondo this article, il loro utilizzo sia in congiunzione è un "potente combinazione". Come mai? Quali ruoli assumono ciascun individuo e come si integrano a vicenda?

risposta

13

Il errorHandler viene utilizzato per gestire qualsiasi Exception non catturato che viene generato durante l'instradamento e l'elaborazione di un messaggio. Al contrario, onException viene utilizzato per gestire specifici tipi Exception quando vengono lanciati. Controlla this article per vedere come utilizzare onException.

+0

Quindi, se scrivo 'onException (Throwable.class)' ho praticamente implementato 'errorHandler'? – DavidS

1

Se l'azione che è necessario eseguire per ciascun tipo di eccezione è diversa, utilizzare onException. Ti consente di definire la gestione degli errori su base per eccezione.

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

se avete solo bisogno di un gestore generica, andare con errorHandler. Per tutti i tipi di errori, verrà eseguita la stessa elaborazione.