如何处理DirectVmConsumerNotAvailableException

时间:2016-01-27 11:34:39

标签: java apache-camel continuous-deployment

我有一个带有direct-vm路由的基于Camel的应用程序,从我们的持续集成服务器重新部署后,我有时会从DirectVmConsumerNotAvailableException获得这些路由。重新部署使用Karaf的命令完成:

features:uninstall my-feature/snapshot-version
features:removeUrl mvn:my-package/my-feature/snapshot-version/xml/features
features:addUrl mvn:my-package/my-feature/snapshot-version/xml/features
features:install my-feature/snapshot-version

我的功能包括几个捆绑包,破坏的direct-vm路由在两个捆绑之间。

有没有办法如何自动重新连接/到direct-vm路由?有没有更好的方法来重新部署Camel应用程序?有没有办法在使用之前检测出损坏的路线?

1 个答案:

答案 0 :(得分:1)

由于Camel 2.16有一个选项failIfNoConsumers你可以设置为false,如果你可以,有一些失败的交换,通常出现在启动时,当捆绑,定义route尚未加载,但是其他一些bundle,使用端点已经是。 缺点是,在正常使用过程中,这些错误通常是不可接受的,需要处理。

我遇到了同样的问题(之前的2.16),并编写了一个自定义错误处理程序,它检查DirectVmConsumerNotAvailableException,如果它在启动期间发生,然后以静默方式丢弃Exchange。

如果您知道路由,初始化您的Direct-VM端点并且可以访问CamelContext,从该点开始发生异常,您可以查看CamelContext.getRouteStatus(String id),路由是否已经启动并运行...