Верблюд - обработка исключений в «подмаршрутах»

Верблюд явно обрабатывает две «области» обработки ошибок:

  • Глобальный
  • за маршрут

Проблема, с которой я сталкиваюсь, - это исключения, возникающие в «подмаршруте». Например, у меня есть этот маршрут:

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

Затем у меня есть два других маршрута, которым нужно отправлять сообщения в веб-сервис:

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

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

Я хотел бы, чтобы, если маршрут веб-службы выдает исключение, оно распространяется до вызывающей стороны, и либо система A, либо система B будут уведомлены. Я не вижу способа добиться этого.

Я чувствую, что это будет обычный вариант использования - кто-нибудь сталкивался с этим раньше?

Еще раз спасибо за ваше время,

Рой


person Roy Truelove    schedule 13.09.2011    source источник


Ответы (1)


Получил ответ от коллеги: для подмаршрута необходимо отключить обработку ошибок:

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

Это заставляет Camel распространять ошибку на вызывающий маршрут.

person Roy Truelove    schedule 13.09.2011