MCollective如何从ActiveMQ队列中替换死用户?

时间:2013-12-03 21:44:06

标签: activemq

通过ActiveMQ 5.8使用MCollective直接寻址时遇到问题。 (http://docs.puppetlabs.com/mcollective/deploy/middleware/activemq.html

当其中一个节点通过MCollective崩溃订阅节点队列并且没有取消订阅时,就会出现问题。当主机再次引导和订阅时,现在有两个具有相同标识的订户,因为ActiveMQ无法识别预先崩溃的用户不再正在侦听。这是直接寻址的一个问题,因为它进入队列,ActiveMQ只将消息发送给一个用户,而且似乎总是选择那个没有收听的用户;所以消息永远不会传递给实际节点。如果我有ActiveMQ记录消息帧,我可以观察到这种情况。

这可能与“持久订阅者”的ActiveMQ概念有关(其中同一身份的订阅者取消订阅任何现有订阅者),但我不知道如何从MCollective配置。

我想要的是新订阅者破坏旧订阅者,或者在向其发送消息并且连接已经死亡时删除死用户(使用Wireshark我可以看到数据包未被确认,而是ICMP数据包返回“目标无法访问”。)

1 个答案:

答案 0 :(得分:0)

显然,根据http://projects.puppetlabs.com/issues/23365,解决方案是使用MCollective 2.3(我使用2.2)和Stomp 1.1 keepalive。