[ 
https://issues.apache.org/jira/browse/CAMEL-4978?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13202280#comment-13202280
 ] 

Andrey Kazantsev commented on CAMEL-4978:
-----------------------------------------

Claus

Thanks for your answer and time!

I agree that introducing new property for *onException* is not a good idea. I 
think current design of *onException* with redelivery is ambiguous. Take a look 
at it definition:

<onException redeliveryPolicyRef="redeliveryPolicy">
  <exception>java.io.IOException</exception>
  <to ref="someEndpoint" />
</onException>

It seems that when exception occurs, message is sent to _someEndpoint_. 
However, if *redeliveryPolicyRef* is defined message will be re-delivered, and 
actions, defined in *onException* are executed only when redelivery attempts 
are exhausted.

Also, if we want to prepare message before redelivery, we define *onRedelivery*:

<onException onRedeliveryRef="someProcessor" 
redeliveryPolicyRef="redeliveryPolicy">
  <exception>java.io.IOException</exception>
  <to ref="someEndpoint" />
</onException>

But why we can't define *onRedelivery* in *redeliveryPolicyRef*? This parameter 
has sense only in case if *redeliveryPolicyRef* is set.

I think my proposal will look very destructive to current error handling 
design, but it seems to be much clear. Here ir is.

*onException* is used for overriding error-handling for some exceptions, with 
possible redeliveries. So we should move all settings related to redelivery out 
of *onException* to *RedeliveryPolicy*. In this case all actions, described in 
*onException* will be executed _every time exception occurs_. In the same time, 
*RedeliveryPolicy* will have two properties: *onRedeliveryRef* and 
*onRedeliveryFailRef*. First one is called before every redelivery (the same 
meaning as now), and second one is called when redelivery attempts are 
exhausted - those actions, currently described in *onException*.

What do you think?
                
> Dead Letter Channel: add onError with correspondence to onRedelivery
> --------------------------------------------------------------------
>
>                 Key: CAMEL-4978
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4978
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>    Affects Versions: Future
>            Reporter: Andrey Kazantsev
>            Priority: Minor
>              Labels: features
>
> When an error occurs there can be situation when some actions should be 
> performed before next redelivery attempt. These actions can be custom logging 
> (in case of Dead Letter Channel we don't have control on logger name and 
> format), creating incident request in internal company system, etc.
> Current version of Dead Letter Channel provides support for specifying 
> processor which is called when next redelivery attempt is performed. However, 
> if delay between attempts is long, this can be too late.
> I think we can implement support for specifying processor which will be 
> called when error occurs, e.g., onError property. Then this processor with 
> information from provided Exchange can take appropriate actions. For example, 
> it can save this message for further investigation, while Dead Letter Channel 
> will keep going on redelivering it.
> If this feature is worth to be implemented, I can prepare a patch. I 
> implemented a work-around in my current project using onRedelivery, but I 
> don't like it because of latency in redelivery interval.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to