0

我已经定义了一个错误处理程序,它适用于多个路由,即

errorHandler(transactionErrorHandler() 
    .maximumRedeliveries(5) 
    .log("SOMETHING USELESS"); 

from(file1) 
    .id(route1) 
    .transacted() 
    .process(new SpecificProcessor1()); 

from(file2) 
    .id(route2) 
    .transacted() 
    .process(new SpecificProcessor2()); 

当特定处理器类之一中发生异常时,将记录以下内容:

[10-Jan-2014 15:08:59.449] [Error] SOMETHING USELESS: Failed delivery for (MessageId: ID-BLAH BLAH). On delivery attempt: 1 caught: java.lang.Exception: cannot do whatever I'm supposed to do 

现在我想打印一些有用的东西来帮助确定异常是否发生在 route1 或 route2 中,即:

[10-Jan-2014 15:08:59.449] [Error] ROUTE 1: Failed delivery for (MessageId: ID-BLAH BLAH). On delivery attempt: 1 caught: java.lang.Exception: cannot do whatever I'm supposed to do 

我怎样才能做到这一点?

我尝试过 .log(${routeId}) 之类的东西,但它不起作用。

非常感谢!

4

2 回答 2

0

要指定路由名称,最好使用 .routeid(),而不是 .id() - 后者设置节点名称,而不是路由名称:

from(file1).routeId(route1)

您可以提取路由 id,您可以使用 exchange.getFromRouteId() 它将返回创建交换的路由 id。如果您使用直接组件嵌套路由,则可以使用工作单元,如下所示:

exchange.getUnitOfWork().getRouteContext().getRoute().getId()

不确定是否有使用 DSL 检索此信息的机制。

我希望这有帮助。

于 2014-01-14T09:40:31.240 回答
0

您可以将线程名称添加到附加程序配置中。例如 log4j 的 %t:

<appender name="..." class="...">
....
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{dd/MM/yyyy HH:mm:ss,SSS} %p %t %c - %m%n" />
    </layout>
</appender>

你会看到类似的东西:

13/01/2014 12:52:33,535 INFO Camel (mainCamelContext) thread #8 - JmsConsumer[jms/customer]  .....

我想这足以识别路线

于 2014-01-13T13:38:15.137 回答