骆驼 - 处理无法恢复的错误

时间:2014-04-16 13:38:55

标签: apache-camel

我正在研究Camel并专注于错误处理。

对于不可恢复的错误(不会通过重试修复的错误),Camel In Action表示您应该使用exchange.getOut().setFault(true)exchange.getOut().setBody("Error Occurred")

实际处理这些错误的最佳方法是什么?现在我在想有两种方法:

  1. 在路线或上下文中使用handleFaults(true),然后像处理任何其他错误一样处理
  2. 如果使用“请求回复模式”
  3. ,原始邮件发件人可以处理它

    1对我来说很简单(除此之外,还可以使用Exceptions / Recoverable errors?)。 2有点棘手 - 我不确定原始发件人如何知道他们收到的消息是错误的(与预期的返回消息相比)。

    我想到的可能是使用Exception来表明这是一个错误:

    路线:

    // 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 个答案:

答案 0 :(得分:1)

Camel可以在ErrorHandler的帮助下很好地处理异常,这意味着你的骆驼路线不需要做太多的事情。 但是对于错误消息,它是应用程序级别消息的一部分,Camel ErrorHandler不想触摸它,因此开发人员应该考虑如何处理它。

相关问题