我正在尝试在网络中设置三个代理以进行负载平衡——客户端和生产者可以连接到这些代理中的任何一个。

问题:

  • 推荐用于连接这些代理的拓扑是什么?更具体地说,要在每个代理上使用的 networkConnector 配置是什么?应该启用双工设置吗? (我猜双工设置取决于我们选择的拓扑)

    A->B->C->A 或 ABCA
  • 客户端应该使用故障转移协议(protocol)来连接这些代理,对吗?例如故障转移://(tcp://b1:6161, tcp://b2:6161, tcp://b3:6161)
  • 在重新启动的情况下,客户端需要处理任何重复的消息吗?请参阅 http://forum.springsource.org/showthread.php?108461-Failover-issue-in-ActiveMQ -- 不清楚为什么此处存在重复消息问题
  • 理想情况下,我们希望设置拓扑,如这篇文章中所示 http://edelsonmedia.com/?p=143 - 不清楚如何在主站和从站上设置 networkConnector。
  • 最佳答案

    1.) 我实际上不能推荐拓扑。此选择取决于您可以接受的跃点数(在消息进入集群的代理和消费者连接到的代理之间)。在流量增加的情况下,每一跳都会增加网络负载。
    在我的公司,我们使用超立方体网络(每个经纪人都认识其他经纪人)并且效果很好。

    一般来说,您应该确保您的节点配置尽可能相似。使用双工确保您需要配置的连接更少(因为从 B 到 A 的连接已经是从 A 到 B 的双工连接的一部分),但它会在您的配置文件中引入大量差异。

    我个人为 ActiveMQ 创建了自己的启动脚本,它根据集群的 dns 名称(mycluster-01 到 06)自动生成连接配置。

    2.) 是的。如果您想确保客户端使用列表中的第一个条目,您可能需要添加 ?randomize=false。

    3.) 如果在消息传输期间出现故障或在重负载期间出现竞争条件,则可能会发生重复条目。一般来说,一个消息只属于一个经纪人。

    4.) 不要在主机和从机之间设置网络连接器(真的不要)。使用activeMQ的纯Master Slave特性,为每个slave配置master(你不必在master上配置任何东西)。对于所有主节点,配置到其他主节点的网络连接,并故障转移到它们的从节点)
    http://activemq.apache.org/pure-master-slave.html

    关于ActiveMQ - 多个代理配置的网络,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6801141/

    10-17 02:28