2014-04-16 51 views
0

我正在駱駝工作,並側重於錯誤處理。駱駝 - 處理不可恢復的錯誤

對於不可修復的錯誤(那些不會被重試修復的錯誤),Camel In Action說您應該使用exchange.getOut().setFault(true)exchange.getOut().setBody("Error Occurred")

實際處理這些錯誤的最佳方法是什麼?現在,我想有兩個方面:

  1. 路線或上下文然後處理像任何其他錯誤
  2. 原始發件人可以處理它的使用handleFaults(true)如果使用請求回覆模式

1對我來說很簡單(除了那個時候,不妨使用Exceptions/Recoverable?)。 2有點棘手 - 我不確定原始發件人如何知道他們收到的郵件是錯誤的(與預期的返回郵件相比)。

我在想什麼可能發生的情況是這樣使用異常,表明它是一個錯誤:

在路線:

// error occurred 
exchange.getOut().setFault(true); 
exchange.getOut().setBody(new Exception(「error」)); 

在發送者(使用QueueRequestor JMS例如,對於請求回覆):

responseMessage = qRequestor.request(msg); 
if(responseMessage instanceof ObjectMessage && ((ObjectMessage)responseMessage).getObject() instanceof Exception) { 
    // AN ERROR OCCURRED IN ROUTE 
} else { 
    // NORMAL PROCESSING OF MESSAGE 
} 

這看起來像很多原始發件人的工作。有沒有更好的方法來處理這個問題?

回答

1

駱駝可以在ErrorHandler的幫助下處理異常情況,這意味着您的駱駝路線不需要做太多的事情。 但是,對於錯誤消息,它是應用程序級別消息的一部分,Camel ErrorHandler不想觸及它,所以開發人員應該考慮如何處理它。