Camel:onException与interceptSendToEndpoint

时间:2012-11-12 14:12:47

标签: exception exception-handling error-handling apache-camel intercept

我正在使用带有JPA的camel 2.10。 我的上下文中有2条路线。 路由1从JPA端点(db表)消耗,进行一些处理(在bean中),然后将消息转发到路由2.如果在处理期间出现问题,则bean返回NULL。

我想在路线2中做的第一件事是检查身体(从路线1转发)是否不是NULL。 因此,我看到了两种可能性: 1)在路线2中使用验证

<route id="route2">
...
<validate>
  <simple>${body} != null</simple>
</validate>

2)使用interceptSendToEndpoint来避免将NULL消息发送到路由2全部:

<interceptSendToEndpoint uri="toRoute2" skipSendToOriginalEndpoint="true">
  <when><simple>${body} == null</simple></when>
  <transform>
    <constant>Error Message</constant>
  </transform>
  <to uri="direct:logError"/>
</interceptSendToEndpoint> 

您认为哪种方式更好?

感谢您的建议!

BR 的Matthias

1 个答案:

答案 0 :(得分:1)

嗯,这是接口问题。

如果将NULL payload视为错误,我会抛出异常。通过修改处理bean和throw new RuntimeException("some error msg");而不是return null;来典型地。如果不可能,你总是可以将bean包装在另一个bean中,而不是返回null - 或者基本上是你在1中做的事情。如果你想做一些错误记录等,异常会挂钩到正常的错误处理程序。

使用截取可能非常强大,但也会使路线不那么明显 - 当您在几年后重新访问代码时。对于这样一个简单的场景来说,这有点过分了。