我有一个调度程序,每 10 分钟将一些值(N 或 Y)放入主题中(通常为“N”,除非主题发生异常)。当主题关闭时,调度程序将填充一个属性(一种调度程序间通信),以便可以在调度程序的下一个周期中使用它,作为告诉调度程序上一个周期发生了一些不好的事情的方式,这样,它在此循环中,将在主题中放置不同的值('Y')。但这里的问题是正常的交换财产没有帮助。该属性在每个调度程序周期内始终为空。
当我浏览http://camel.apache.org/schema/blueprint/camel-blueprint.xsd,寻找类似于全局属性的东西时,我得到了这个“tns:properties” 可以在上下文级别设置。 这可以用作全局属性吗? 有没有办法在我的调度程序路由中读取/写入它?
我还在考虑使用一个带有实例变量的 bean 来保存这个调度程序间通信属性。
有人可以建议正确的选择吗?
查看 http://camel.apache.org/properties.html
这似乎正是您正在寻找的 - 上下文属性。您可以在每个周期设置一个属性值,并且该属性值也将在下一个周期中可用。
在我看来,您所描述的听起来像是一种在进程之间维护状态的方法,并且由于多种原因,为此使用属性会出现问题。
我建议将应用程序分成几个不同的部分,并使用共享的 OSGi 服务来维护状态。
public interface MyScheduleState() {
public setSomeValue(String x)
public String getSomeValue()
}
路线 1:计时器启动任务..检查服务的值..发送事件。 如果发生错误,则将错误消息发送到某个队列://MY.ERRORS
路线 2:侦听 MY.ERRORS 上的错误并使用新值更新 OSGi 服务
这使您可以控制行为,并且您可以更改“有状态服务”存储其数据的方式..无论是在内存中、在磁盘上作为文件还是在缓存中”,并且您的路由永远不会知道具体细节。
Camel 4.4 引入了变量。