【问题标题】:ActiveMQ Scheduler Failover with JDBC MasterSlave使用 JDBC MasterSlave 的 ActiveMQ 调度程序故障转移
【发布时间】:2015-02-08 20:49:01
【问题描述】:

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

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

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

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

这是我需要的基本概述:

  1. 主代理和从代理启动并运行,使用相同的 dataDirectory(比如说,broker1 和 broker2)
  2. 如果我在某个时间通过 master 发送处理消息的请求并且 master 失败,slave 应该能够从 master 获取调度程序信息(这是我卡住的地方)
  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 相当陌生。提前致谢!

【问题讨论】:

    标签: java oracle jdbc activemq


    【解决方案1】:

    我建议支持 ActiveMQ 上的问题https://issues.apache.org/jira/browse/AMQ-5238,因为即使您不使用预定消息,您也会遇到重新传递策略到位的调度程序问题。

    【讨论】:

      【解决方案2】:

      您可能已经弄清楚要完成这项工作需要做些什么,但是为了像我这样正在/正在寻找答案的其他人。如果您尝试使用默认 kahaDb 存储(从 v 5.13.2 开始)和共享文件系统对预定消息进行故障转移,则需要执行以下操作:

      1. 将共享文件系统中的文件夹定义为代理标记中的 dataDirectory 属性。以下示例中的 /shared/folder
      2. 对该主/从集群中的所有节点使用相同的 brokerName。以下示例中的 myBroker1。

      例子:

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

      【讨论】:

        【解决方案3】:

        如果有人好奇,将 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"/>
        

        【讨论】:

        • 我面临同样的情况,同样缺乏关于这种常见模式用法的信息。我想知道您是否对两个经纪人使用相同的经纪人标签?我的意思是:相同的调度程序目录(OK)和相同的代理名称?谢谢
        • @pierrefevrier 是的,相同的代理标签和相同的调度程序目录,就我而言,它们都需要相同的调度程序数据。但是,根据调度程序数据,可能需要一个单独的调度程序目录
        猜你喜欢
        • 2016-08-28
        • 2019-05-01
        • 1970-01-01
        • 2017-02-04
        • 2010-11-06
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多