ActiveMQ Scheduler Failover with JDBC MasterSlave



我目前有一个有效的双代理JDBC MasterSlave配置,下一步是实现一个带有故障转移的调度程序。我环顾四周,没有看到任何关于这方面的信息,很好奇这是否可能,或者我是否应该尝试不同的方法。

目前,我有两个代理在代理标记和 JDBCPersistenceAdapter 标记中使用相同的 dataDirectory。但是,在该数据目录中,ActiveMQ 会创建两个单独的调度程序文件夹。我似乎无法强制它使用相同的,因此使用调度进行故障转移不起作用。

我也尝试了具有相同标准的 KahaDB 方法,但这似乎也不起作用。

另一种选择是将调度程序信息推送到数据库(在本例中为 oracle(,并能够从那里获取(不确定是否可能(。

以下是我需要的基本概述:

  1. 主代理和从代理启动并运行,使用相同的 dataDirectory(例如,代理 1 和代理 2(
  2. 如果我在某个时间通过主站发送处理消息的请求,而主站失败了,从站应该能够从主站获取调度程序信息(这是我卡住的地方(
  3. 从站应该在预定的时间处理这些消息

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 开始(和共享文件系统对计划消息进行故障转移,则需要执行以下操作:

  1. 在共享文件系统中定义一个文件夹,作为代理标记中的 dataDirectory 属性。
  2. 对该主/从集群中的所有节点使用相同的代理名称。 在下面的示例中为 myBroker1。

例:

<broker xmlns="http://activemq.apache.org/schema/core" 
        brokerName="myBroker1" 
        dataDirectory="/shared/folder" 
        schedulerSupport="true">

最新更新