有没有办法在apache camel中使用全局属性

时间:2016-10-11 16:55:57

标签: apache-camel

我有一个调度程序,每10分钟将一些值(N或Y)放入一个主题(通常为'N',除非主题发生异常)。当主题发生故障时,调度程序将填充一个属性(一种调度程序间通信),以便在调度程序的下一个循环期间使用它,作为告诉调度程序在上一个循环中发生了错误的方式,这样,它在此循环中将在主题中放置不同的值('Y')。但这里的问题是正常的交换财产没有帮助。在每个调度程序周期中,该属性始终为null。

当我浏览http://camel.apache.org/schema/blueprint/camel-blueprint.xsd,寻找类似于全局属性的东西时,我得到了一个“tns:properties” 可以在上下文级别设置。 这可以用作全球财产吗? 有没有办法在我的调度程序路径中读/写它?

我也在考虑使用一个带有实例变量的bean来保存这个inter-scheduler-communication属性。

有人可以提出正确的选择吗?

2 个答案:

答案 0 :(得分:0)

你所描述的内容对我来说就像是一种在进程之间维护状态的方法,并且由于多种原因而使用这些属性会有问题。

我建议将应用程序分成几个不同的部分,并使用共享的OSGi服务来维护状态。

public interface MyScheduleState() {
   public setSomeValue(String x)
   public String getSomeValue()
}

路由1:计时器启动任务..检查服务的值..发送事件。如果发生错误,则将错误消息发送到某个队列://MY.ERRORS

路线2:在MY.ERRORS上侦听错误并使用新值更新OSGi服务

这使您可以控制行为,并且可以更改“有状态服务”存储其数据的方式..在内存中,在磁盘上作为文件或在缓存中“并且您的路由永远不会知道具体信息。

答案 1 :(得分:0)

看看http://camel.apache.org/properties.html

似乎正是您正在寻找的 - 上下文属性。您可以在每个周期设置属性值,也可以在下一个周期中使用。