如果代理不可用,则javax.jms.TemporaryTopic.delete()无限期阻塞

时间:2019-01-15 06:15:29

标签: java jms activemq jms-topic

我已为ActiveMQ代理配置了故障转移。以请求方式发送的任何遇到超时的消息,我们都会删除为侦听答复而创建的临时主题。现在,同一时间我的代理不可用,而在删除临时主题线程时,它在javax.jms.TemporaryTopic.delete()处无限期地阻塞。 如果有人有经验请避免这种情况,请提供帮助。

2 个答案:

答案 0 :(得分:0)

据我所知,这里唯一的选择是配置故障转移传输,以放弃经过一定次数的尝试后重新建立连接的尝试。也可以配置两次尝试之间的时间,以便您可以对其进行一定程度的管理。

答案 1 :(得分:0)

我目前也正面临这个问题。到目前为止,这是我的分析结论。

为了避免在临时主题删除或发送消息期间代理不可用时永远阻止访问。

建议1:

使用如下所示的maxReconnectAttempts=2代理URL参数。

failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=120000)?maxReconnectAttempts=2

当尝试重新连接定义的时间时,该连接将被终止。因此,此后您必须重新创建连接。

建议2:

使用如下所示的timeout=2000代理URL参数。

failover:(tcp://localhost:61616?wireFormat.maxInactivityDuration=120000)?timeout=2000

连接不会过期。当代理可用时,我们可以重用相同的连接和会话。

建议2 似乎会更有用,因为我们将重用相同的Connection和Session。

如果找到更有效的解决方案来解决这种情况,我将发布。谢谢。