以下是《骆驼在行动》一书中的路线示例。在上下文范围内有一个错误处理程序,并且有两个路由定义。我的问题
说上下文级别错误处理程序仅适用于路由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块(我更喜欢第一种方法)