2011-09-13 51 views
9

駱駝異常處理明確處理的錯誤處理兩個「範圍」:駱駝 - 在「子路徑」

  • 全球每路線

我遇到的問題

  • 被拋出異常在「子路線」中。舉例來說,我已經得到了這條路線:

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

    那麼我就需要將郵件發送到該web服務的其他兩條路線:

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

    我想發生,如果webservice路由拋出一個異常,它傳播給調用者,系統A或系統B都會被通知。我看不到一種方法來實現這一點。

    我覺得這將是一個常見的用例 - 有沒有人碰到過它?再次

    感謝您的時間,

    羅伊

  • 回答

    16

    從同事那裏得到了答案:該subroute需要有它的錯誤處理禁用:

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

    這迫使駱駝傳播錯誤到呼叫路由。