根据this answer,即使使用单个地址,使用“故障转移”协议和“tcp”传输也会带来好处。
除此之外,ActiveMQ documentation,以下适用(强调我的):
如果JMS代理发生故障,ActiveMQ可以使用failover:协议自动重新连接到可用的JMS代理。这不仅会自动重新连接,还会恢复任何临时目的地,会话,生产者以及最重要的消费者。
使用“vm”传输时这是否也适用?
我们看到队列消费者停止接收消息的常见问题,而队列填满了,我们还没有找到解决方法。这是使用ActiveMQ v5.6.0 - 我们目前正在升级到v5.14.5,但也希望探索其他选项。
我们当前针对ActiveMQConnectionFactory的Spring配置如下所示:
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"
depends-on="amqEmbeddedBroker">
<property name="brokerURL" value="vm://localhost" />
<property name="watchTopicAdvisories" value="false" />
</bean>
在这种情况下,将网址从vm://localhost
更改为failover:(vm://localhost)
是否会带来任何好处,即保护连接因任何原因而被关闭?更改URL以包含failover:
部分时,我可以看到创建了FailoverTransport
的实例,但它是否在vm
传输的情况下提供了任何好处?
答案 0 :(得分:1)
如果连接失败,故障转移将尝试重新连接。因此,如果您正在执行通常会导致连接失败的操作,您将无法看到异常,但它会静默尝试重新连接。因此,如果您的内存代理已经死亡,客户端将保持静默,并可能会发出一些尝试重新连接的日志。
由于网络问题,VM连接不会失败,因此您可能需要进一步调查。但升级似乎是第一步。