Apache camel 暂停的骆驼路线报告未暂停

Apache camel 暂停的骆驼路线报告未暂停,apache-camel,Apache Camel,我正在开发一个消息路由器,我的部分设计是基于控制路由中的一些文件命令停止/挂起和启动/恢复路由 我尝试按照骆驼的建议,支持暂停/恢复路线,作为停止/启动路线的替代方案 我的恢复逻辑取决于某些路由的状态,例如我有两条不能同时激活的路由ABC和XYZ。为了便于实现这一点,我的控制路线支持两个命令SUSPEND和RESUME。因此,简而言之,如果路线ABC未暂停,恢复XYZ将不会起任何作用 我的单元测试(使用JMockit)通过了OK。然而,当运行真正的应用程序时,我可以看到路由XYZ从未恢复,即使我

我正在开发一个消息路由器,我的部分设计是基于控制路由中的一些文件命令停止/挂起和启动/恢复路由

我尝试按照骆驼的建议,支持暂停/恢复路线,作为停止/启动路线的替代方案

我的恢复逻辑取决于某些路由的状态,例如我有两条不能同时激活的路由ABC和XYZ。为了便于实现这一点,我的控制路线支持两个命令
SUSPEND和RESUME
。因此,简而言之,如果路线ABC未暂停,恢复XYZ将不会起任何作用

我的单元测试(使用JMockit)通过了OK。然而,当运行真正的应用程序时,我可以看到路由XYZ从未恢复,即使我之前暂停了路由ABC

我放置了一些日志条目,令我惊讶的是,在执行了
route.suspend(“ABC”)
之后,显然成功地为驼峰日志条目提供了路由ABC仍然报告为未挂起的日志条目。代码如下:

LOGGER.info(r.getId() + " route supports suspension=" + r.supportsSuspension());
context.suspendRoute(r.getId());
LOGGER.info("After suspending route " + r.getId() + " the route suspended state is " + ((ServiceSupport) r).isSuspended());
以下是日志条目:

[INFO ] my.org.message.router.lifecycle.DeactivateCommand - ABC route supports suspension=true
[INFO ] org.apache.camel.impl.DefaultShutdownStrategy - Starting to graceful shutdown 1 routes (timeout 300 seconds)
[INFO ] org.apache.camel.impl.DefaultShutdownStrategy - Route: ABC suspend complete, was consuming from: Endpoint[abc://queue:SOME_QUEUE]
[INFO ] org.apache.camel.impl.DefaultShutdownStrategy - Graceful shutdown of 1 routes completed in 0 seconds
[INFO ] org.apache.camel.spring.SpringCamelContext - Route: ABC is suspended, was consuming from: Endpoint[abc://queue:SOME_QUEUE]
[INFO ] my.org.message.router.lifecycle.DeactivateCommand - After suspending route ABC the route suspended state is false
因此,我的问题是:

  • 这是一个错误还是我做得不对
  • 如果有一个bug,我应该采取停止/启动的方式吗
  • 如果是我的错,那么实现我所追求的目标的正确方法是什么

  • 提前感谢您的输入

    是的,Apache Camel中存在一个错误,无法报告正确的状态-路由确实已暂停。我已经登记了一张票:


    您可以使用camelContext.getRouteStatus(routeId)api获得正确的状态。

    可能是您的错,因为abc是一个自定义组件,请确保使用doSuspend/doResume方法完成工作,而不是挂起/恢复。