跨越骆驼环境捕捉异常

时间:2014-07-08 09:44:09

标签: apache-camel

我有两条路线 - 每条路线都在不同的驼峰环境中:

<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能够捕获它。我努力地试着运气但却无法上班;是不是喜欢捕获不支持的驼峰上下文中的异常,或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

您可以捕获异常并向某种错误处理端点发送消息,而不是尝试将异常抛回到其他上下文(由于camel 2.x中的机制可能甚至可能不可能)。

只要您知道端点名称,就可以在不同的路径构建器或上下文中轻松定义。

然后每个路由在顶部具有完全相同的样板异常处理程序,例如:

onException(Exception.class).handled(true).to("direct-vm:errors")

我们经常在不同的路由构建器之间使用这种自定义错误处理(在相同的上下文中,但模式可以在上下文中同样容易地应用)。

在我们的应用程序中,例如,我们捕获异常,将它们聚合在一个列表中,每当15秒没有新的异常时,我们通过smtp发送一封电子邮件 - 使用定义为{{1 }}