5

在我的 ActiveMQ 客户端中,当我指定要连接的代理时,指定之间有什么区别

tcp://host:port

failover:(tcp://host:port)

我尝试停止和启动代理,在这两种情况下,客户端在重新启动时都会再次找到代理。我还没有尝试过消息流(我正在使用队列)或其他网络故障,看看是否有区别。

希望有人能给出明确的答案,因为我发现的文档有点含糊。

谢谢

4

3 回答 3

5

如果您使用故障转移,那么当您失去与服务器的连接时,客户端库会进入重新连接循环。网络故障将从您的应用程序中隐藏。如果您不使用故障转移,那么当您失去连接时,您的应用程序将收到一个 JMS 错误,告诉您您失去了连接。

于 2013-06-21T20:13:38.797 回答
2

故障转移协议还允许您提供一些有用的连接参数。例如:

failover:(tcp://host:port)?jms.useAsyncSend=true&timeout=5000

如果代理不可用或没有响应,这里timeout=5000将确保在 5 秒后退出初始连接尝试。

于 2013-06-21T20:19:40.070 回答
1

故障转移对于处理代理或系统故障的问题非常有用,并提供了持久性。

故障转移:(tcp://host1:port,tcp://host2:port,tcp://host3:port)?jms.useAsyncSend=true&randomize=false

在这里,如果您设置 randomize = true,那么它将同时使用所有 3 个代理,而 randomize = false 意味着一次使用一个代理,并且当正在运行的代理出现故障时,从休眠的代理中选择任何一个代理。并且 useAsyncSend = true 将以异步方式运行消息系统,这比同步方式要快。

于 2015-10-09T04:58:56.023 回答