1

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

4

2 回答 2

2

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

来自官方 AMQ 文档

故障转移传输层在任何其他传输之上重新连接逻辑。

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

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

默认情况下,故障转移传输跟踪事务。飞行中的事务在重新连接时重播。

于 2012-05-30T15:58:00.873 回答
1

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

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

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

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

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

于 2012-05-30T07:24:19.340 回答