Java ApacheCamel错误处理程序范围澄清

Java ApacheCamel错误处理程序范围澄清,java,apache-camel,Java,Apache Camel,下面是《骆驼行动手册》中的路线示例。上下文范围中有一个错误处理程序和两个路由定义。我的问题 上下文级错误处理程序仅适用于路由1,这样说是否正确 死信错误处理程序是否针对路由2中任何步骤引发的任何异常启动。i、 e.从orderService.validate()和orderService.enrich() 如果我想为validate()和rich()方法产生的异常使用不同的错误处理程序,该怎么办 //上下文范围错误处理程序 errorHandler(defaultErrorHandler()

下面是《骆驼行动手册》中的路线示例。上下文范围中有一个错误处理程序和两个路由定义。我的问题

  • 上下文级错误处理程序仅适用于路由1,这样说是否正确
  • 死信错误处理程序是否针对路由2中任何步骤引发的任何异常启动。i、 e.从
    orderService.validate()
    orderService.enrich()
  • 如果我想为
    validate()
    rich()
    方法产生的异常使用不同的错误处理程序,该怎么办

    //上下文范围错误处理程序

    errorHandler(defaultErrorHandler()
        .maximumRedeliveries(2)
        .redeliveryDelay(1000)
        .retryAttemptedLogLevel(LoggingLevel.WARN));
    
    //Route 1
    
    from("file://target/orders?delay=10000")
        .beanRef("orderService", "toCsv")
        .to("mock:file")
        .to("seda:queue.inbox");
    
    //Route 2 with route scope error handler
    
    from("seda:queue.inbox")
        .errorHandler(deadLetterChannel("log:DLC")
        .maximumRedeliveries(5).retryAttemptedLogLevel(LoggingLevel.INFO)
        .redeliveryDelay(250).backOffMultiplier(2))
        .beanRef("orderService", "validate")
        .beanRef("orderService", "enrich")
        .to("mock:queue.order");
    
  • 你对#1和#2的假设是正确的

    对于#3,要么定义以捕获bean方法抛出的显式异常(OrderValidateException、EnricheException等),要么在路由中的每个步骤周围使用内联块(我更喜欢第一种方法)