Apache camel 驼峰-处理不可恢复的错误

Apache camel 驼峰-处理不可恢复的错误,apache-camel,Apache Camel,我正在研究Camel并专注于错误处理 对于无法恢复的错误(那些无法通过重试修复的错误),Camel In Action建议您应该使用exchange.getOut().setFault(true)和exchange.getOut().setBody(“错误发生”) 实际处理这些错误的最佳方法是什么?现在我想有两种方法: 在路由或上下文上使用handleFaults(true),然后像处理任何其他错误一样进行处理 如果使用请求-应答模式,原始消息发送者可以处理它 1对我来说是直截了当的(除此之外,

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

对于无法恢复的错误(那些无法通过重试修复的错误),Camel In Action建议您应该使用
exchange.getOut().setFault(true)
exchange.getOut().setBody(“错误发生”)

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

  • 在路由或上下文上使用
    handleFaults(true)
    ,然后像处理任何其他错误一样进行处理
  • 如果使用请求-应答模式,原始消息发送者可以处理它
  • 1对我来说是直截了当的(除此之外,还可以使用异常/可恢复错误?)。2有点棘手——我不确定原始发件人如何知道他们返回的消息是错误的(与预期的返回消息相比)

    我认为可能发生的情况是,使用异常来指示这是一个错误:

    途中:

    // error occurred
    exchange.getOut().setFault(true);
    exchange.getOut().setBody(new Exception(“error”));
    
    在发送方中(jms示例使用QueueRequestor进行请求回复):


    这似乎是对原始发件人的大量工作。有更好的处理方法吗?

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

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