以下是《骆驼在行动》一书中的路线示例。在上下文范围内有一个错误处理程序,并且有两个路由定义。我的问题


说上下文级别错误处理程序仅适用于路由1是否正确?
死信错误处理程序是否会引发路线2中任何步骤(即orderService.validate()orderService.enrich())引发的任何异常。
如果我想为来自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和#2的假设是正确的...

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

09-26 06:40