我在通过ActiveMQ 5.8使用MCollective直接寻址时遇到问题。(http://docs.puppetlabs.com/mcollective/deploy/middleware/activemq.html)
当通过MCollective订阅到节点队列的一个节点崩溃而没有取消订阅时,就会出现问题。当主机启动并再次订阅时,现在有两个具有相同身份的订阅者,因为ActiveMQ无法识别崩溃前的订阅者不再侦听。这是直接寻址的问题,因为它进入队列,ActiveMQ只将消息发送给一个订阅者,并且它似乎总是选择没有侦听的订阅者;因此消息永远不会传递到实际节点。如果我让ActiveMQ记录消息帧,我可以观察到这种情况。
这可能与“持久订阅者”(具有相同身份的订阅者取消订阅任何现有的订阅者)的ActiveMQ概念有关,但我不知道这是如何在MCollective中配置的。
我想要的是要么新的订阅者跳过旧的订阅者,要么当一条消息被发送到旧的订阅者并且连接断开时,失效的订阅者被删除(使用Wireshark,我可以看到数据包不是ACKed,而是ICMP数据包返回"Destination unreachable")。
发布于 2013-12-06 05:35:28
显然,根据http://projects.puppetlabs.com/issues/23365的说法,解决方案是使用Stomp2.3(我使用的是2.2)和Stomp1.1 keepalives。
https://stackoverflow.com/questions/20362334
复制相似问题