我正在研究Camel并专注于错误处理。
对于不可恢复的错误(不会通过重试修复的错误),Camel In Action表示您应该使用exchange.getOut().setFault(true)
和exchange.getOut().setBody("Error Occurred")
。
实际处理这些错误的最佳方法是什么?现在我在想有两种方法:
handleFaults(true)
,然后像处理任何其他错误一样处理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
}
这对原始发件人来说似乎很多工作。有没有更好的方法来处理这个?
答案 0 :(得分:1)
Camel可以在ErrorHandler的帮助下很好地处理异常,这意味着你的骆驼路线不需要做太多的事情。 但是对于错误消息,它是应用程序级别消息的一部分,Camel ErrorHandler不想触摸它,因此开发人员应该考虑如何处理它。