2014-04-16 65 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不想触及它,所以开发人员应该考虑如何处理它。