Camel - Exception handling in 'sub routes'

2020-06-01 07:07发布

问题:

Camel explicitly handles two 'scopes' of error handling:

  • Global
  • per Route

The issue I'm having is exceptions thrown in a 'sub route'. For instance, I've got this route:

from("direct:sendToWebservice").
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

Then I've got two other routes that need to send messages to the webservice:

from(direct:fromSystemA").
    .errorHandler(deadLetterChannel("direct:TellSystemA")).
    .to("direct:sendToWebservice");

from(direct:fromSystemB").
    .errorHandler(deadLetterChannel("direct:TellSystemB")).
    .to("direct:sendToWebservice");

What I would like to happen is, if the webservice route throws an exception, it's propagated up to the caller, and either system A or system B would be notified. I don't see a way to achieve this.

I feel like this would be a common use case - has anyone bumped up against it before?

Thanks again for your time,

Roy

回答1:

Got the answer from a colleague: The subroute needs to have it's error handling disabled:

from("direct:sendToWebservice").
    .errorHandler(noErrorHandler())     // disables error handling for this route
    .processRef("massageBeforeSending").
    .to("http://webservice.com").
    .processRef("massageResponse");

This forces Camel to propagate the error to the calling route.