【问题标题】:Apache ActiveMQ Failover ProtocolApache ActiveMQ 故障转移协议
【发布时间】:2012-06-04 08:43:47
【问题描述】:

为什么java只能在activemq中支持故障转移协议,而其他语言不能。 我的疑问是,在像 failover://(tcp://host1:61616,tcp://host2:61616)?randomize=false 这样的故障转移协议中,客户端也使用像 tcp://host1:61616 这样的内部 URL 之一,然后代理如何知道呼叫是否使用了某些故障转移协议,然后代理如何决定它需要复制消息?

【问题讨论】:

    标签: replication message activemq failover broker


    【解决方案1】:

    请理解failover 协议仅用于客户端的重新连接逻辑,AMQ 代理甚至不知道客户端是否使用failover 协议。

    来自official AMQ documentation

    故障转移传输层在任何一个之上重新连接逻辑 其他交通工具。

    故障转移配置语法允许您指定任意数量的 复合 uri。故障转移传输随机选择其中一个 复合 URI 并尝试建立到它的连接。如果确实如此 不成功或者如果它随后失败,一个新的连接是 建立到列表中的其他 uri 之一。

    不知道这里的复制是什么意思,但根据官方文档

    默认情况下,故障转移传输会跟踪事务。机上 交易在重新连接时重播。

    【讨论】:

    • 是的,确实如此,通过实验设置得出了相同的结论。感谢您的快速回复:)
    【解决方案2】:

    使用 ActiveMQ 建立 HA 解决方案有不同的场景。

    如果客户端使用故障转移协议连接到主机 1、主机 2,则还需要为 HA 设置代理设置。

    一种解决方案是在 Active-Active 解决方案中集群 host1 和 host2。然后消息总是在被请求时传播——队列在整个集群中的所有 amq 代理之间共享。

    否则,如果不喜欢主动-主动解决方案,则可以设置主从解决方案,其中两个代理主机 1 和主机 2 共享数据区域(例如使用数据库进行持久性或共享 SAN 磁盘)。

    有更多的设置组合,但故障转移协议假定整个解决方案可以处理到达不同代理的消息(如果一个代理出现故障)。据我所知,从代理的角度来看,故障转移协议没有其他神奇之处。

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2017-01-27
      • 2019-05-01
      • 2010-11-06
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      相关资源
      最近更新 更多