我試圖處理使用自定義處理器的異常。我的路線建設者看起來是這樣的:模仿Apache Camel DefaultErrorHandler
onException(Exception.class)
.maximumRedeliveries(0)
.process(exceptionProcessor)
.handled(true)
.to("file:C:\\Mahesh\\delete\\failedrequests");
我的異常處理器看起來是這樣的:
public class ExceptionProcessor implements Processor
{
private static final Logger LOGGER = ExLoggerFactory.getLogger(ExceptionProcessor.class);
@Override
public void process(Exchange exchange) throws Exception
{
Exception ex = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
Object messageHistroy = exchange.getProperty(Exchange.MESSAGE_HISTORY, Object.class);
LOGGER.error("\n\nMessage History\n---------------------------------------------------------------------------------------------------------------------------------------\n"
+ messageHistroy
+"\n\nStacktrace\n---------------------------------------------------------------------------------------------------------------------------------------"
);
ex.printStackTrace();
}
}
正如你所看到的,上面我試圖模仿DefaultErrorHandler
的行爲:它首先打印消息歷史記錄然後堆疊跟蹤。
但是,我的ExceptionProcessor
不像DefaultErrorHandler
那樣以相同的方式打印消息歷史記錄。 DefaultErrorHandler
打印這樣的:
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor Elapsed (ms)
[route1 ] [route1 ] [file://C:%5CMahesh%5Cdelete%5Ccamelsource ] [ 121]
[route1 ] [process1 ] [[email protected] ] [ 120]
[ ] [to1 ] [file:C:\Mahesh\delete\badworkitems ] [ 98]
而我ExceptionProcessor
打印這樣的:
Message History
---------------------------------------------------------------------------------------------------------------------------------------
[DefaultMessageHistory[routeId=route1, node=process2], DefaultMessageHistory[routeId=null, node=process1]]
問:看來,我的處理器是不是能夠得到處理器和第三排第三列到端點。我如何得到這個。
此外,打印消息歷史記錄之前,也DefaultErrorHandler
此打印:
o.a.camel.processor.DefaultErrorHandler : Failed delivery for (MessageId: ID-01HW865638-58603-1492677082431-0-7 on ExchangeId: ID-01HW865638-58603-1492677082431-0-8). Exhausted after delivery attempt: 1 caught: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('"' (code 34)): was expecting comma to separate OBJECT entries
at [Source: C:\Mahesh\delete\camelsource\file1.json; line: 4, column: 3]. Processed by failure processor: FatalFallbackErrorHandler[Channel[sendTo(file://C:%5CMahesh%5Cdelete%5Cbadworkitems)]]
問:正如你所看到的,DefaultFaultHandler
還能夠打印消息ID,交換ID,源文件名和發送 - 到文件夾名稱。我想知道從哪裏得到這些信息。對於源文件名,我嘗試了所有Exchange.FILE_*
屬性,但全部打印爲null
。