暂停的骆驼路线报告未被暂停

时间:2015-07-10 02:41:06

标签: apache-camel

我正在开发一个消息路由器,我的部分设计是根据控制路径中丢弃的一些文件命令停止/暂停和启动/恢复路由。

我试图按照驼峰建议来支持暂停/恢复路线作为停止/启动它的替代方案。

我的恢复逻辑取决于某些路线的状态,说我有两条路线ABC和XYZ同时无法激活。为方便起见,我的控制路由支持两个命令SUSPEND <route id> and RESUME <route id>。因此,如果路线ABC未被暂停,那么简而言之RESUME 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

所以我的问题是:

  1. 这是一个错误,还是我做错了
  2. 如果有错误可以解决,或者我应该停止/启动
  3. 如果我的错,那将是实现我的目标的正确方法
  4. 提前感谢您的输入

1 个答案:

答案 0 :(得分:1)

是的,这是Apache Camel中没有报告正确状态的错误 - 路由确实已暂停。我已经记录了一张票:https://issues.apache.org/jira/browse/CAMEL-8964

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