我有两条路线 - 每条路线都在不同的驼峰环境中:
<camelContext id="camelContext1" xmlns="http://camel.apache.org/schema/blueprint">
<onException>
<exception>com.me.MyException</exception>
<to uri="log:osgiExecutorLog"/>
</onException>
<route id="MyRoute">
<from uri="amq:test" />
<to uri="direct:MyDirect"/>
</route>
</camelContext>
<camelContext id="camelContext2" xmlns="http://camel.apache.org/schema/blueprint">
<route id="MyRoute">
<from uri="direct:MyDirect" />
<process ref="myProc"/>
</route>
</camelContext>
有些情况下myProc会抛出MyException,我希望camel context 1中的onException能够捕获它。我努力地试着运气但却无法上班;是不是喜欢捕获不支持的驼峰上下文中的异常,或者我错过了什么?
答案 0 :(得分:1)
您可以捕获异常并向某种错误处理端点发送消息,而不是尝试将异常抛回到其他上下文(由于camel 2.x中的机制可能甚至可能不可能)。
只要您知道端点名称,就可以在不同的路径构建器或上下文中轻松定义。
然后每个路由在顶部具有完全相同的样板异常处理程序,例如:
onException(Exception.class).handled(true).to("direct-vm:errors")
我们经常在不同的路由构建器之间使用这种自定义错误处理(在相同的上下文中,但模式可以在上下文中同样容易地应用)。
在我们的应用程序中,例如,我们捕获异常,将它们聚合在一个列表中,每当15秒没有新的异常时,我们通过smtp发送一封电子邮件 - 使用定义为{{1 }}