ActiveMQ故障转移连接URL

时间:2016-04-30 07:29:41

标签: java activemq

我对ActiveMQ故障转移协议有两个问题。

问题1 :当我使用以下网址嵌套时,它无法连接到ActiveMQ。

failover:(tcp://192.168.1.111:61616)?nested.jms.useAsyncSend=true&initialReconnectDelay=1000&maxReconnectAttempts=-1

问题2 :以下网址工作正常。它还在第一次重启时重新连接到ActiveMQ,但是当我第二次关闭ActiveMQ时Java程序终止并且没有任何异常。

failover:(tcp://192.168.1.111:61616)?jms.useAsyncSend=true&initialReconnectDelay=1000&maxReconnectAttempts=-1

ActiveMQ版本: 5.10.0

参考:http://activemq.apache.org/failover-transport-reference.html

1 个答案:

答案 0 :(得分:0)

嵌套前缀仅对应用于故障转移URI内部内部TCP / SSL传输的选项有用,或者可能对使用多播发现等发现的代理地址有用。它们不适用于连接级别选项(那些启动用' jms。'例如)。如果设置为以下内容,您的第一个URI将是正确的:

failover:(tcp://192.168.1.111:61616)?jms.useAsyncSend=true&initialReconnectDelay=1000

这是因为 jms.useAsyncSend 选项应用整个连接,而不应用于故障转移故障转移中基于 tcp 的传输的单个连接 URI。

嵌套选项可能是 soTimeout tcpNoDelay 等。

您不需要尝试将重新连接尝试设置为无限,因为这仍然是默认假设,只有当您希望将其限制为某些固定数量的尝试时才需要设置此选项。

如果您的应用程序在故障转移重新连接周期期间关闭,那么我的猜测是您依靠ActiveMQ库来维护至少一个非守护程序线程以使其保持活动,这实际上是一个不好的假设,依赖于任何第三方保持应用程序运行通常是不好的做法,你应该让自己的设计强制执行应用程序,直到你真的希望它关闭。