我目前有一个有效的双代理JDBC MasterSlave配置,下一步是实现一个带有故障转移的调度程序。我环顾四周,没有看到任何关于这方面的信息,很好奇这是否可能,或者我是否应该尝试不同的方法。
目前,我有两个代理在代理标记和 JDBCPersistenceAdapter 标记中使用相同的 dataDirectory。但是,在该数据目录中,ActiveMQ 会创建两个单独的调度程序文件夹。我似乎无法强制它使用相同的,因此使用调度进行故障转移不起作用。
我也尝试了具有相同标准的 KahaDB 方法,但这似乎也不起作用。
另一种选择是将调度程序信息推送到数据库(在本例中为 oracle(,并能够从那里获取(不确定是否可能(。
以下是我需要的基本概述:
- 主代理和从代理启动并运行,使用相同的 dataDirectory(例如,代理 1 和代理 2(
- 如果我在某个时间通过主站发送处理消息的请求,而主站失败了,从站应该能够从主站获取调度程序信息(这是我卡住的地方(
- 从站应该在预定的时间处理这些消息
ActiveMQ.xml(相关部分(
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="b1" useJmx="true"
persistent="true" schedulerSupport="true">
<!-- kahaDB persistenceAdapter -->
<persistenceAdapter>
<kahaDB directory="{activemq.data}/kahadb" enableIndexWriteAsync="false"
ignoreMissingJournalfiles="true" checkForCorruptJournalFiles="true"
checksumJournalFiles="true"/>
</persistenceAdapter>
<!-- JDBC persistenceAdapter -->
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="{activemq.data}" dataSource="#oracle-ds"/>
</persistenceAdapter>
有人可以指出我正确的方向吗?我对ActiveMQ相当陌生。提前感谢!
如果有人好奇,将 schedulerDirectory 属性添加到代理标记似乎工作正常。所以我在 activemq 中的代理标签.xml现在看起来像这样:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="broker1"
dataDirectory="{activemq.data}" useJmx="true" persistent="true"
schedulerSupport="true" schedulerDirectory="{activemq.data}/broker1/scheduler"/>
您可能已经弄清楚了需要做什么才能完成这项工作,但是为了像我这样正在寻找答案的其他人。 如果您尝试使用默认 kahaDb 存储(从 v 5.13.2 开始(和共享文件系统对计划消息进行故障转移,则需要执行以下操作:
- 在共享文件系统中定义一个文件夹,作为代理标记中的 dataDirectory 属性。
- 对该主/从集群中的所有节点使用相同的代理名称。 在下面的示例中为 myBroker1。
例:
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="myBroker1"
dataDirectory="/shared/folder"
schedulerSupport="true">