ActiveMQ故障转移连接url



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

问题1:当我使用带有嵌套的以下url时,它不会连接到ActiveMQ。

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

问题2:以下url工作正常。它也在第一次重新启动时重新连接到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

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

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

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

嵌套选项可以是soTimeouttcpNoDelay等。

您不需要尝试将重新连接尝试设置为无限,因为这过去是,现在仍然是默认的假设,只有当您想将其限制在某个固定次数的尝试时,才需要设置此选项。

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

最新更新