骆驼运行时计时器更改

Posted

技术标签:

【中文标题】骆驼运行时计时器更改【英文标题】:Camel runtime timer change 【发布时间】:2014-02-14 01:18:41 【问题描述】:

我有一个关于骆驼和计时器的问题。我有几个计时器,其中一个我想在运行时更新。我正在使用 osgi 蓝图来配置适当的周期。 那么如何从路由中更改计时器(使用我知道的名称)?

【问题讨论】:

【参考方案1】:

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

尽管 Ralf 提到的内容可以提供帮助,因为这允许您从可以控制路由生命周期的 bean 访问 CamelContext。

但也请参阅控制总线 EIP 关于这些事情

http://camel.apache.org/controlbus

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

http://hawt.io/plugins/quartz/

您也可以使用石英 JMX API 从 Java 代码中做到这一点。

我在 Apache Camel JIRA 跟踪器中记录了一张票,其想法是在未来改进 Camel,以便更轻松地更新计时器使用者:https://issues.apache.org/jira/browse/CAMEL-7153 - 然后在实施时您可以更轻松地做到这一点。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于骆驼运行时计时器更改的主要内容,如果未能解决你的问题,请参考以下文章

调用 invalidate() 时计时器在 Android 中不起作用

WAR 版本更改后运行 EJB 持久计时器

Vertx 定时器更改延迟

计时器从 Notification RemoteViews 中的特定值开始

用于秒表实现的 MFC 时间工具

GAMEMAKER 2.o 按下按钮后增加计时器