有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果在死信中重新交付失败,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) 个答案

  1. # 1 楼答案

    只需使用文件端点作为死信通道,而不是日志端点,例如

     errorHandler(deadLetterChannel("file:errors")