【问题标题】:Configuring Apache Camel Dead Letter Handler配置 Apache Camel 死信处理程序
【发布时间】:2013-04-02 20:54:08
【问题描述】:

我使用 Spring DSL 定义了以下路由:

<camelContext id="myapp-camel-ctx" errorHandlerRef="deadLetterErrorHandler"
xmlns="http://camel.apache.org/schema/spring">
    <route id="myapp-camel-route">
        <from uri="timer://runOnce?repeatCount=1&amp;delay=10" />

        <to uri="bean:fizzBean?method=doFizz" />

        <!-- What I call the "Smooks processor" -->
        <to uri="smooks://my-smooks-config.xml" />

        <to uri="bean:buzzBean?method=doBuzz" />
    </route>
</camelContext>

<bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
    <property name="deadLetterUri" value="bean:errorCatcher" />
</bean>

<bean id="errorCatcher" class="com.me.myorg.myapp.ErrorCatcher">
    <property name="foo" value="BAR" />
</bean>

有时,根据fizzBean 的输出(出站消息),Smooks 处理器会抛出异常并挂起整个应用程序。当它这样做时,我可以在应用程序日志中看到抛出的异常(它实际上是一个 MySQL 异常),但不知道如何包装/捕获它并继续处理。我认为,考虑到上面的ErrorCatcher 设置,抛出的 MySQL 异常将得到处理,并且路由将继续处理。相反,我从未在我的应用程序日志中看到任何证据表明在引发这些 Smooks/MySQL 异常时会执行 ErrorCatcher#handle 方法。

我在这里配置了什么不正确吗?我还能做些什么(通过 Smooks 处理器的 URI 配置或其他方式)来防止从该处理器内部引发的异常挂起整个应用程序?提前致谢!

【问题讨论】:

  • 您使用什么 Camel 版本?我们曾经有一个错误,在 上设置错误处理程序没有按预期工作。但是将其设置在 上会起作用。

标签: java apache-camel smooks dead-letter


【解决方案1】:

这取决于 Smooks 团队如何实现他们的 Camel 组件。 Camel 错误处理程序只有在抛出异常时才会启动,C​​amel 可以捕获该异常;或者使用 setException 在 Exchange 上显式设置了异常。如果 Smooks 不这样做(也许他们捕获了异常,并且不会将其传播回 Camel),那么 Camel 就无法检测到该异常并对其做出反应。

如果您想查看运行时发生的情况,可以启用跟踪器 http://camel.apache.org/tracer

还请注意,当您使用 bean 来处理带有错误处理程序的异常时。然后阅读这个常见问题解答如何访问导致的异常:http://camel.apache.org/why-is-the-exception-null-when-i-use-onexception.html

【讨论】:

    【解决方案2】:

    你的配置似乎是正确的,如果你想看看它是否有效,你可以改变你的句柄方法签名如下

    public void handle(Exception exception, Exchange exchange) {
        System.out.println("Got Exception..."+exception.getMessage());
        System.out.println("Exchange is :"+exchange);
        }
    

    现在您可以在控制台上看到结果...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多