我有一条骆驼路线,在Karaf内运行,为此我添加了一个死信频道。这是为了处理路由失败并且我想保留问题消息并记录原因的情况。由于无法异步处理某些处理,因此无法将异常返回给调用应用程序。

通过阅读文档并尝试了多种情况,我不清楚如何将异常记录到Karaf的日志中以及将原始消息存储到死信队列中。

这是我所拥有的内容的摘录:

<bean id="deadLetterQueue" class="org.apache.camel.builder.DeadLetterChannelBuilder">
    <property name="deadLetterUri" value="activemq:dead.letter.queue"/>
    <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
</bean>

<bean id="redeliveryPolicy" class="org.apache.camel.processor.RedeliveryPolicy">
    <property name="maximumRedeliveries" value="1"/>
    <property name="redeliveryDelay" value="1000"/>
</bean>

<camelContext id="notification" errorHandlerRef="deadLetterQueue"
    trace="false" xmlns="http://camel.apache.org/schema/blueprint">
    <onException>
        <exception>org.xyz.exceptions.unchecked.notificationException</exception>
        <log logName="notifications" loggingLevel="ERROR"
            message="Exception from notification Camel route" />
    </onException>

    <route id="DoSomething" errorHandlerRef="deadLetterQueue">
        <from uri="activemq:notification.in" />
        <log logName="notifications" loggingLevel="TRACE"
            message="Notification route initiated" />
        <bean ref="NotificationProcessor" method="doStuff" />
    </route>
</camelContext>


如果删除“ onException”结构,则在所有异常情况下,源消息都会出现在死信队列中,但不会记录。

如果我按上述方式运行,则异常跟踪将记录到Karaf的日志中(如果它是“ notificationException”),但是关联的源消息不会回滚到死信队列,而会消失在以太币中(大概是因为它认为我是ve在“ onException”结构中进行了处理)。

看了不同类型的错误处理程序后,我尝试改为向DeadLetterChannelBuilder添加内容,例如...

<property name="logName" value="notifications"/>
<property name="level" value="ERROR"/>


...但是这些不是合法财产。

这也让我感到震惊,必须在onException子句中明确列出不同的异常是不正确的。

因此,如何获取死信通道以记录异常跟踪以及将消息放入队列?死信通道可能不是正确的处理程序-在这种情况下,我对自动重新交付并不真正感兴趣。

感谢您的指导,

J.

最佳答案

您可以只对死信队列使用路由,并进行日志记录并发送到JMS队列。然后用direct来指代这条路线

<property name="deadLetterUri" value="direct:myDLC"/>

<route>
  <from uri="direct:myDLC"/>
  <log logName="notifications" loggingLevel="ERROR"
            message="Exception from notification Camel route" />
  <to uri="activemq:dead.letter.queue"/>
</route>


您正在使用什么版本的骆驼?

08-04 23:00