Camel运行时计时器更改

时间:2014-01-23 13:06:42

标签: java apache-camel apache-servicemix

我对骆驼和计时器有疑问。我有几个计时器,其中一个我想在运行时更新。我正在使用osgi蓝图来配置适当的时间段。 那么如何更改计时器(我知道的名字),例如路线?

2 个答案:

答案 0 :(得分:0)

您可以将bean添加到实现org.apache.camel.CamelContextAware的路由中。 Camel将在启动时注入对上下文的引用。使用上下文,您可以获得定时器/石英端点的参考并更新其配置。

我不知道的是,这是否足以根据您的新句点/ cron-expression重新安排触发器。也许您必须将端点转换为TimerEndpoint并直接使用它,例如根据您的新计划设置新的Timer实例。

答案 1 :(得分:0)

计时器不允许在运行时更改,您需要停止路由,更新路由上的计时器端点,然后再次启动路由。

虽然Ralf提到了什么可以提供帮助,因为这允许您从bean中访问CamelContext,您可以在其中控制路径的生命周期。

但另请参阅关于此类事情的控制总线EIP

如果使用quartz而不是timer,那么它有一个JMX API,允许在运行时更新其调度程序/触发器。我们在hawtio中执行此操作,因此您可以使用可视UI进行更新

您也可以使用quartz JMX API从Java代码中执行此操作。

我在Apache Camel JIRA跟踪器中记录了一张票,其中包含将来改进Camel的想法,以便更新计时器消费者:https://issues.apache.org/jira/browse/CAMEL-7153 - 然后您可以更轻松地实现它。