apache-camel错误处理程序范围说明

时间:2012-03-07 01:54:17

标签: java apache-camel

以下是Camel In Action手册中的示例路线。上下文范围内有一个错误处理程序和两个路由定义。我的问题

  1. 说上下文级错误处理程序仅适用于Route 1?
  2. 是否正确?
  3. 对于路由2中任何步骤引发的任何异常,即orderService.validate()orderService.enrich()错误处理程序是否会启动。
  4. 如果我需要针对validate()enrich()方法产生的异常的不同错误处理程序,该怎么办?

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

    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 个答案:

答案 0 :(得分:1)

你对#1&的假设#2是正确的......

对于#3,要么定义Exception Clauses来捕获bean方法抛出的显式异常(OrderValidateException,EnrichException等),要么在路由的每一步周围使用内联try-catch块(我更喜欢首先接近我自己)