1

这是我尝试使用 ActiveMQ 实现的目标:我想要 2 个代理集群:clusterA 和 clusterB。这两个集群之间的数据应该被镜像。因此,当 clusterA 收到一条消息时,它将存储在 storageA 中,并且该消息应该转发给 clusterB(如果有这样的需求)并存储在 storageB 中。另一方面,如果clusterB 收到一条消息,它应该被转发到clusterA。我想知道根据上面的描述,这样的配置是否被认为是有效的:

    <networkConnectors>
    <networkConnector 
          uri="static:(failover(tcp://clusterB_broker1:port,tcp://clusterB_broker2:port,tcp://clusterB_broker3:port))"
          name="bridge"
          duplex="true"
          conduitSubscriptions="true"
          decreaseNetworkConsumerPriority="false"/> 
    </networkConnectors>
4

1 回答 1

1

这是一个有效的配置。它指示(假设所有 ClusterA 代理都以这种方式配置)ClusterA 中的代理将首先存储并转发到clusterB_broker1,如果它关闭,将改为存储并转发到,如果它关闭clusterB_broker2,然后再转发到。但是根据您的集群内代理配置,它不会按照您的意愿进行操作。 clusterB_broker3clusterB_broker2

代理配置必须设置为自己进行故障转移,否则当clusterB_broker1出现故障时您将丢失消息。如果 clusterB 代理未按如下所述一起工作,那么当clusterB_broker1出现故障时,发送给它的任何消息都不会在其他 clusterB 代理上出现或访问。新消息将转发给他们。

如何在集群中进行故障转移取决于您的 ActiveMQ 版本。

最新版本 (5.9.0)支持3 种故障转移(或主/从)集群配置。为了快速参考,它们是:

  • 共享文件系统主从
  • JDBC主从
  • 复制的 LevelDB 存储

早期版本支持主/从配置,该配置具有一个主节点和一个从节点,其中消息被转发到从代理。此设置维护不善,存在错误,已从 ActiveMQ 中删除。

于 2014-04-15T21:57:31.023 回答