ActiveMQ经纪人网络不转发消息

时间:2013-03-20 17:57:24

标签: activemq failover

我有两个配置为存储转发网络的ActiveMQ代理(A和B)。当代理B连接消费者并且生产者向A发送消息时,它们完美地将消息从A转发到B.问题是当消费者被杀死并重新连接到A时,B上排队的消息(它们是从A)不会转发回消费者所连接的A。即使我向B发送新消息,所有消息都被卡在B上,直到我重新启动经纪人。我试图在代理网络连接器上设置networkTTL =“4”和duplex =“true”,但它不起作用。

2 个答案:

答案 0 :(得分:4)

迟到的答案,但希望这将有助于其他人。

消息卡在B中,因为默认情况下,AMQ不允许将消息发送回先前已经发送到的代理。在正常情况下,这可以防止消息在网状网络拓扑周围循环而不会被传递,但在故障转移的情况下,它会导致消息卡在一个代理上,无法到达所有消费者所在的代理。

如果当前代理是一个死胡同,因为没有连接到它的消费者,允许消息返回代理,你应该使用replayWhenNoConsumers = true来允许将卡在B上的消息转发回A. / p>

http://activemq.apache.org/networks-of-brokers.htmlhttp://tmielke.blogspot.de/2012/03/i-have-messages-on-queue-but-they-dont.html的“粘滞消息(版本5.6)”部分介绍了该配置选项,您可能希望与其一起使用的一些设置以及使用它时的一些注意事项。 }和https://issues.apache.org/jira/browse/AMQ-4465。确保您可以忍受这些更改的副作用(例如,您的代理到代理网络连接可能会传递其他消息的重复消息)。

答案 1 :(得分:1)

您能否提供有关经纪人A和B的配置以及您想要实现的目标的更多信息?

在我看来,你可以通过设置经纪人网络(A和B)来实现你想要的,生产者只连接到一个,消费者连接到另一个。 只要其他经纪人对发送消息的目的地进行了有效订阅,消息就会自动传输到其他经纪人。

如果您不确定它产生的后果(它往往会导致不需要的消息循环),我建议不要更改networkTTL。