【发布时间】: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&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