2012-05-30 118 views
1

为什么java只能在activemq中提供对故障转移协议的支持,而不支持其他语言。 我的疑问是,在像failover://(tcp://host1:61616,tcp://host2:61616)?randomize=false这样的故障转移协议中,客户端也使用其中一个内部URL(例如tcp://host1:61616),然后代理如何知道该调用正在使用某种故障转移协议,以及代理如何确定它需要复制该消息?Apache ActiveMQ故障转移协议

回答

2

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

official AMQ documentation

故障转移输送层重新连接上的任何 其他传输的顶部的逻辑。

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

不知道你的位置复制,但按照官方文档

故障转移输送段的交易由默认的意思。交易在重新连接时重播 交易。

+0

是的,真正的说,通过实验设置得出了相同的结论。感谢您及时的回复 :) –

1

有不同的方案来搭建ActiveMQ的HA解决方案。

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

一个解决方案是在主动 - 主动解决方案中将host1和host2集群。然后,消息总是在需要时传播 - 所有amq代理中的整个集群都共享队列。否则,如果主动 - 主动解决方案不是首选,那么可以在两个代理(host1和host2)共享数据区域的情况下设置主从解决方案(例如使用数据库进行持久性存储或共享SAN磁盘)。

还有更多设置组合,但故障转移协议假定整个解决方案可以处理消息到达不同经纪人(如果发生故障)。据我所知,从代理的角度来看,故障转移协议没有其他魔力。