2012-03-07 52 views
0

下面是一個例子航線採取從駱駝在行動的書。在上下文範圍和兩個路由定義中有一個錯誤處理程序。我的問題Apache的駱駝錯誤處理程序範圍澄清

  1. 說上下文級錯誤處理程序僅適用於路由1是否正確?
  2. 是否死信錯誤處理程序踢在路線2,即從任何一個步驟拋出從orderService.validate()orderService.enrich()任何異常。
  3. 如果我想要從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

在#1 &#2是正確的你的假設......

爲#3,無論是定義Exception Clauses趕上通過拋出明確的例外bean的方法(OrderValidateException,EnrichException等),或在你的路線周圍使用的每一步內嵌try-catch塊(我更喜歡第一種方法我自己)