【问题标题】:ActiveMQ network of brokers don't forward messages代理的 ActiveMQ 网络不转发消息
【发布时间】:2013-03-10 00:02:32
【问题描述】:

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

【问题讨论】:

    标签: activemq failover


    【解决方案1】:

    迟到的答案,但希望这会在未来对其他人有所帮助。

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

    如果当前代理因为没有消费者连接而死路,要允许消息返回到代理,您应该使用 replayWhenNoConsumers=true 来允许将卡在 B 上的消息转发回 A。

    http://activemq.apache.org/networks-of-brokers.htmlhttp://tmielke.blogspot.de/2012/03/i-have-messages-on-queue-but-they-dont.html 和 @ 的“Stuck Messages (version 5.6)”部分描述了该配置选项、您可能希望与其结合使用的一些设置以及使用它时的一些注意事项987654323@。确保您可以忍受这些更改的副作用(例如,跨代理到代理网络连接的其他消息的重复消息传递的可能性)。

    【讨论】:

      【解决方案2】:

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

      在我看来,您可以通过设置代理网络(包括 A 和 B)来实现您想要的,生产者只连接到一个,消费者连接到另一个。 只要其他代理对消息发送到的目的地有活动订阅,消息就会自动传输到其他代理。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 2017-10-18
        • 2015-03-14
        • 2013-07-08
        • 2010-11-30
        相关资源
        最近更新 更多