使用“故障转移:”协议与ActiveMQ中的“vm:”传输有什么好处?

时间:2017-11-28 11:54:34

标签: jms activemq spring-jms

根据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传输的情况下提供了任何好处?

1 个答案:

答案 0 :(得分:1)

如果连接失败,故障转移将尝试重新连接。因此,如果您正在执行通常会导致连接失败的操作,您将无法看到异常,但它会静默尝试重新连接。因此,如果您的内存代理已经死亡,客户端将保持静默,并可能会发出一些尝试重新连接的日志。

由于网络问题,VM连接不会失败,因此您可能需要进一步调查。但升级似乎是第一步。