2011-09-13 47 views
9

Camel 'tiểu đường' xử lý một cách rõ ràng hai 'phạm vi' của xử lý lỗi:Camel - xử lý ngoại lệ trong

  • toàn cầu
  • mỗi Route

Vấn đề tôi đang gặp là trường hợp ngoại lệ ném trong 'tuyến đường phụ'. Ví dụ, tôi đã có tuyến đường này:

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

Sau đó, tôi đã có hai con đường khác mà cần phải gửi tin nhắn đến các webservice:

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

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

Những gì tôi muốn xảy ra là, nếu tuyến đường webservice ném một ngoại lệ, nó được truyền đến người gọi và cả hệ thống A hoặc hệ thống B sẽ được thông báo. Tôi không thấy cách nào để đạt được điều này.

Tôi cảm thấy như đây sẽ là trường hợp sử dụng phổ biến - có ai đã từng chống lại nó trước đây không?

Cảm ơn một lần nữa cho thời gian của bạn,

Roy

Trả lời

16

Got câu trả lời từ một đồng nghiệp: Các subroute cần phải có đó là lỗi xử lý khuyết tật:

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

Điều này buộc Camel để tuyên truyền các lỗi đến tuyến gọi.