代理的 ActiveMQ 网络不转发消息

标签 activemq failover

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

最佳答案

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

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

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

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

关于代理的 ActiveMQ 网络不转发消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15531244/

相关文章:

java - JMS 消息选择器不起作用

rabbitmq - Celery RabbitMQ 代理故障转移连接问题

groovy - Groovy 中使用 ActiveMQ 的 JMS - 无法解析类 ActiveMQConnectionFactory

java - 无法删除 ActiveMQ ScheduledMessage?

jms - HornetQ vs ActiveMQ vs Qpid 的优势

java - 主动 MQ、JNDI、Spring 错误

redis - Redis 是 SignalR 在 SQL Server 上横向扩展的更好选择吗?每个都支持故障转移吗?

java - Mysql-Proxy 不进行故障转移(?)

erlang - 关于如何处理 ejabberd 集群中的故障转移有什么建议吗?

django - 如何使用 Django 对 Redis 进行故障转移