如果在死信中重新交付失败,java骆驼将消息存储在文件组件中
我有一个xml文件,其中有5行正在拆分,如果在处理第三行时发生异常,那么作为死信通道的一部分,重新交付也会失败
我的文件。xml
<orders>
<order>
<orderid>1</orderid>
</order>
<order>
<orderid>2</orderid>
</order>
<order>
<order> //Have not closed order intentionally to get a exception
<order>
<orderid>4</orderid>
</order>
<order>
<orderid>5</orderid>
</order>
</orders>
我的路线
errorHandler(deadLetterChannel("log:Error Occured!!!!")
.onExceptionOccurred(new ErrorHandlerProcessor())
.useOriginalMessage()
.allowRedeliveryWhileStopping(true)
.maximumRedeliveries(10)
.redeliveryDelay(2000)
.retryAttemptedLogLevel(LoggingLevel.INFO));
from("file:E:/camel")
.routeId("File_Pickup_Route")
.split(body().tokenizeXML("order", "orders"))
.convertBodyTo(String.class)
.process(new SplitProcessor())
.convertBodyTo(File.class)
.bean(MyBean.class,"saveMetaData()")
错误处理器
public class ErrorHandlerProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
System.out.println("\n\n Inside My Error Handler Processor()");
try {
Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
exchange.getIn().setHeader("FailedBecause", cause.getMessage());
} catch (Exception e) {
System.out.println(e.printstacktrace());
}
输出
22:47:41,094 INFO [Error Occured!!!!] (Camel (FilePickup) thread #0 - file://E:/camel) Exchange[ExchangePattern: InOnly, BodyType: String, Body: <order>
<orderid>3</orderid>
<order>
如何将控制台中打印的失败内容保存为单独的文件??这可能吗
# 1 楼答案
只需使用文件端点作为死信通道,而不是日志端点,例如