[원문출처] http://camel.apache.org/defaulterrorhandler.html


해당 문서의 경우 Apache 재단의 Camel Document 문서 일부를 번역 한 것입니다. 
번역본인 해당 문서의 경우 역자에게 있음을 알리며 상업적 이용을 불허합니다. 

www.sogomsoft.co.kr (주) 소곰소프트 





DefaultErrorHandler

Camel 2.0 이후부터 새 기본 에러 핸들로 이다. .

 Dead Letter Channel처럼 같은 힘을 가지고 있다. 그러나 둘 사이의 단지 큰 차이점은 데드 레터 큐(dead letter queue)를 가지지 않는다

DefaultErrorHandler 는 Dead Letter Channel에서 환경 구성되었던 것과는 다르게 환경 구성 된다.:

  • 재 전송 없음
  • 처리 없음
  • 데드 레터 큐 (dead letter queue) 없음 (가능하지 않음)

기본적으로, 라우팅 되는 동안 던져진 어떤 exception 호출한 곳에 다시 전파되고 Exchange 는 바로 끝난다. 그러나, 처리된 표시함으로써 주어진 Exception 또는 더 낮은 Exception을 잡아내기 위해 Exception Clause 를 사용 할 수 있다 만약 호출한 곳에 돌려지지 않게 되면 Exchange 가 라우팅 되는 것을 계속 할 수 있다.

예제

아래 라우터에서, 안에 던져진 어떤 exception (예를 들면 validateOrder 빈) Jetty 엔드포인트를 통해서 다시 전파된다. 클라이언트에 HTTO 에러 메시지를 반환하게 될 것이다. 


from("jetty:http://localhost/myservice/order").to("bean:validateOrder").to("jms:queue:order");

이 경우에 다르게 확실한 Exception과 라우터를 잡아내기를 원하면 onException 을 추가 할 수 있다. 예를 들면 ValidationException을 잡아 내기 위해 호출한 곳에 고정된 응답을 반환 한다. d return a fixed response to the caller.


onException(ValidationException.class).handled(true).transform(body(constant("INVALID ORDER")));

 from("jetty:http://localhost/myservice/order").to("bean:validateOrder").to("jms:queue:order");

validateOrder 빈으로부터 ValidationException 이 발생했을 때, DefaultErrorHandler에 의해 인터셉터되고 onException(ValidationException.class)가 그 에러를 처리 하게 한다. 그래서 Exchange가 onException 라우터에 라우팅되고 handled(true) 를 사용할 때, 원본 Exception은 제거되고 고정된 응답 값으로 jetty 엔드포인트에 돌려줄 원래 호출한 곳에 반환될 메시지를 변형한다.

참고


+ Recent posts